宣告一個通用方法
方法也可以具有泛型型別引數。
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
)。