有時候,很多時候我在文檔中看到這件事。它讓我想知道要輸入什麼。有人能向我解釋這個清楚的文字中的含義:D。如何:這到底意味着什麼Collection <? extends E> c
ArrayList(Collection<? extends E> c)
落得被用作這樣的:
new ArrayList<>(Arrays.asList("a","b","c"));
所以我不需要通過在google,但是能夠通過弄明白問這個「問題」了我。
有時候,很多時候我在文檔中看到這件事。它讓我想知道要輸入什麼。有人能向我解釋這個清楚的文字中的含義:D。如何:這到底意味着什麼Collection <? extends E> c
ArrayList(Collection<? extends E> c)
落得被用作這樣的:
new ArrayList<>(Arrays.asList("a","b","c"));
所以我不需要通過在google,但是能夠通過弄明白問這個「問題」了我。
語法? 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
,但這樣的作品,因爲String
是CharSequence
的子類型。
謝謝理解+1 – Josephus87
查看[Oracle泛型泛型教程](https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html)。您可能想閱讀整章,因爲Java中的泛型可能非常混亂。另外,查看[PECS助記符](http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs)。 – Turing85