Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及其后续版本中更新的语言功能的摘要。
请参阅JDK发行说明以获取有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
泛型方法是引入自己类型参数的方法。这类似于声明泛型类型,但类型参数的作用域仅限于声明它的方法。允许静态和非静态的泛型方法,以及泛型类构造函数。
泛型方法的语法包括一个在方法返回类型之前的尖括号内的类型参数列表。对于静态泛型方法,类型参数部分必须出现在方法返回类型之前。
Util类包含一个泛型方法compare,用于比较两个Pair对象:
public class Util { public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) { return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue()); } } public class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public void setKey(K key) { this.key = key; } public void setValue(V value) { this.value = value; } public K getKey() { return key; } public V getValue() { return value; } }
调用该方法的完整语法如下:
Pair<Integer, String> p1 = new Pair<>(1, "apple"); Pair<Integer, String> p2 = new Pair<>(2, "pear"); boolean same = Util.<Integer, String>compare(p1, p2);
类型已经明确提供,如加粗所示。通常,可以省略这个,编译器将推断所需的类型:
Pair<Integer, String> p1 = new Pair<>(1, "apple"); Pair<Integer, String> p2 = new Pair<>(2, "pear"); boolean same = Util.compare(p1, p2);
这个特性称为类型推断,允许您将泛型方法作为普通方法调用,而不需要在尖括号之间指定类型。这个主题在下一节类型推断中进一步讨论。