2015-11-05 56 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