2015-11-05 75 views
3

有時候,很多時候我在文檔中看到這件事。它讓我想知道要輸入什麼。有人能向我解釋這個清楚的文字中的含義:D。如何:這到底意味着什麼Collection <? extends E> c

ArrayList(Collection<? extends E> c) 

落得被用作這樣的:

new ArrayList<>(Arrays.asList("a","b","c")); 

所以我不需要通過在google,但是能夠通過弄明白問這個「問題」了我。

+5

查看[Oracle泛型泛型教程](https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html)。您可能想閱讀整章,因爲Java中的泛型可能非常混亂。另外,查看[PECS助記符](http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs)。 – Turing85

回答

7

語法? extends E表示「某種類型,即E或E的子類型」。 ?是通配符。

代碼Arrays.asList("a","b","c")推斷返回一個List<String>,和new ArrayList<>使用金剛石操作者,以便產生一個ArrayList<String>

通配符讓你推斷亞型 - 你可以將其與超分配給一個參考變量:

List<CharSequence> list = new ArrayList<>(Arrays.asList("a","b","c")); 

這裏,E被推斷爲CharSequence,而不是String,但這樣的作品,因爲StringCharSequence的子類型。

+0

謝謝理解+1 – Josephus87