究竟这意味着什么收集<! - ?扩展E - > c

时间:2015-11-05 21:10:36

标签: java javadoc

有时候,很多时候我都会在文档中看到这种情况。它让我想知道要输入什么。有人可以用明确的愚蠢的文字向我解释这个含义:D。怎么样:

ArrayList(Collection<? extends E> c)

最终将被用作:

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

因此我不需要通过Google搜索来询问这个“问题”,而是能够自己解决这个问题。

2 个答案:

答案 0 :(得分:8)

语法? 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的子类型。

答案 1 :(得分:0)

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

此语句创建一个全新的 ArrayList 对象,该对象包含与使用 Arrays.asList("a","b","c") 生成的列表相同的元素。

因此,新的 ArrayList 和原来的 String 列表是完全独立的对象。

仅供参考:Arrays.asList(arrAgument); 这将创建一个不可变/不可修改的列表。我们不能通过添加或删除项目来更改,因为底层 String 数组的长度不能在运行时更改。如果您尝试添加或删除 java.lang.UnsupportedOperationException 将在运行时抛出。