繁体   English   中英

这到底是什么意思收藏<? extends E> C

[英]What exactly does this mean Collection<? extends E> c

有时,很多时候我在文档中看到这件事发生。 这让我想知道该输入什么。 有人可以用清晰的简化文本向我解释这个的含义:D。 这是怎么做的:

ArrayList(Collection<? extends E> c)

最终被用作:

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

所以我不再需要通过谷歌搜索来问这个“问题”,而是能够自己弄清楚。

语法? extends E ? extends E表示“是E或E的子类型的某种类型”。 ? 是通配符。

Arrays.asList("a","b","c")代码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的子类型。

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 将在运行时抛出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM