泛型方法

Author Avatar
贾康 11月 11, 2016

#泛型方法
泛型方法是声明了它自己的类型参数的方法,这和声明泛型类型有些相似。但是类型参数仅仅被限制在这个声明的方法中。静态或是非静态的都可以,泛型类的构造函数也是这样。
泛型方法包括一个在尖括号内,位置是返回类型之前的类型参数。对于静态泛型方法,类型参数必须是在方法返回类型之前。
Util类包含一个比较两个Pair对象的泛型方法compare,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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; }
}

我们可以通过如下方式调用这个方法:

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

在上面的代码中类型被显式的声明了,事实上调用方法时类型参数可以不写出来:

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

这个特性被称为类型推理。允许你以调用普通方法的方式来调用泛型方法,关于更多的细节我们将会在类型推理类型推理中说明。
下一页