声明一个通用方法
方法也可以具有泛型类型参数。
public class Example {
// The type parameter T is scoped to the method
// and is independent of type parameters of other methods.
public <T> List<T> makeList(T t1, T t2) {
List<T> result = new ArrayList<T>();
result.add(t1);
result.add(t2);
return result;
}
public void usage() {
List<String> listString = makeList("Jeff", "Atwood");
List<Integer> listInteger = makeList(1, 2);
}
}
请注意,我们不必将实际类型参数传递给泛型方法。编译器根据目标类型(例如我们将结果赋给的变量)或实际参数的类型推断出我们的类型参数。它通常会推断出使调用类型更正的最具体的类型参数。
有时,虽然很少,但可能需要使用显式类型参数覆盖此类型推断:
void usage() {
consumeObjects(this.<Object>makeList("Jeff", "Atwood").stream());
}
void consumeObjects(Stream<Object> stream) { ... }
在这个例子中是必要的,因为在调用 stream()
之后编译器不能向前看看 Object
是否需要 T
,否则它将根据 makeList
参数推断 String
。请注意,当显式提供类型参数时,Java 语言不支持省略调用该方法的类或对象(在上例中为 this
)。