宣告一個通用方法

方法也可以具有泛型型別引數。

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)。