泛型方法(**Generic methods**是引入自己的类型形参的方法。这类似于声明泛型类型,但是类型形参的范围仅限于声明它的方法。允许使用静态和非静态泛型方法,以及泛型类构造器。
    泛型方法的语法包括类型形参列表,在尖括号内,该列表出现在方法的返回类型之前。对于静态泛型方法,类型形参部分必须出现在方法的返回类型之前。
    Util类包括一个泛型方法compare,比较两个Pair 对象:

    1. public class Util {
    2. public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
    3. //<K, V>是尖括号包裹的类型形参列表,在返回类型boolean之前
    4. return p1.getKey().equals(p2.getKey()) &&
    5. p1.getValue().equals(p2.getValue());
    6. }
    7. }
    8. public class Pair<K, V> {
    9. private K key;
    10. private V value;
    11. public Pair(K key, V value) {
    12. this.key = key;
    13. this.value = value;
    14. }
    15. public void setKey(K key) { this.key = key; }
    16. public void setValue(V value) { this.value = value; }
    17. public K getKey() { return key; }
    18. public V getValue() { return value; }
    19. }

    调用此方法的完整语法为:

    1. Pair<Integer, String> p1 = new Pair<>(1, "apple");
    2. Pair<Integer, String> p2 = new Pair<>(2, "pear");
    3. boolean same = Util.<Integer, String>compare(p1, p2);
    4. //泛型方法compare的类型形参列表<K, V>,对应的类型实参列表为<Integer, String>

    该类型已明确提供,如上面注释所示。通常,可以将其忽略,编译器将推断出所需的类型:

    1. Pair<Integer, String> p1 = new Pair<>(1, "apple");
    2. Pair<Integer, String> p2 = new Pair<>(2, "pear");
    3. boolean same = Util.compare(p1, p2);

    此功能称为类型推断(type inference,使您可以在不指定尖括号之间的类型的情况下,将泛型方法作为普通方法调用。下一节“类型推断”将进一步讨论该主题 。