2015-07-19 68 views
3

我無法理解下面的語句,而這的確是編譯:Java泛型語法

List<Integer> l = Collections.<Integer>singletonList(5); 

說,第二<Integer>,我們如何能夠在方法名稱前加上一個<Integer>?我懷疑這是一種泛型的聲明,但無法在任何地方找到它。但我只知道List<Integer>的定義,將<Integer>放在泛型類型後面。任何人都可以爲我指出這個語法的教程,或者找到重複的問題(對不起,我在我的快速搜索中沒有找到)?

非常感謝!

+0

https://docs.oracle.com/javase/tutorial/extra/generics/methods.html – manouti

+0

同樣https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html – manouti

+0

這的確的確如此我在找什麼。謝謝! @manouti – zzy

回答

3

這被稱爲型證人,並且它是在Type Inference trail引用:

通用方法addBox定義了一個名爲U.一種類型的參數通常,一個Java編譯器可以推斷的類型參數通用方法調用。因此,在大多數情況下,您不必指定它們。例如,要調用泛型方法addBox,你可以按照如下用類型見證指定類型參數:

BoxDemo.<Integer>addBox(Integer.valueOf(10), listOfIntegerBoxes); 

實際上,一種見證讓開發步驟來解決案件中,類型引擎不能正確地推斷出什麼類型的值會導致。你會在Java 7中看到它的使用更普遍和普遍,而Java 8已經改進了它的類型推斷能力。

+1

謝謝!這絕對有幫助! – zzy