有时候,很多时候我在文档中看到这件事。它让我想知道要输入什么。有人能向我解释这个清楚的文字中的含义: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