有时候,文档中出现了很多次这个东西。这让我不知道该输入什么。能否用通俗易懂的语言解释一下它的含义呢?是这样的:
ArrayList(Collection<? extends E> c)
最终被用作这样:
new ArrayList<>(Arrays.asList("a","b","c"));
所以我不需要再通过谷歌搜索来询问这个“问题”,而是能够自己解决。
有时候,文档中出现了很多次这个东西。这让我不知道该输入什么。能否用通俗易懂的语言解释一下它的含义呢?是这样的:
ArrayList(Collection<? extends E> c)
new ArrayList<>(Arrays.asList("a","b","c"));
所以我不需要再通过谷歌搜索来询问这个“问题”,而是能够自己解决。
? 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
的一个子类型。
Collection<? extends E> c
和仅写 Collection c
有何不同? - Arun GowdaList<String> testList1 = new ArrayList<>(Arrays.asList("a","b","c"));
这个语句创建了一个全新的ArrayList对象,其中包含使用Arrays.asList("a","b","c")生成的列表中相同的元素。
因此,新的ArrayList和原始的String列表是完全独立的对象。
FYI:Arrays.asList(arrAgument); 这将创建一个不可变/不可修改的列表。由于底层的String数组长度无法在运行时更改,因此无法通过添加或删除项目来更改它。如果尝试添加或删除,则会在运行时抛出java.lang.UnsupportedOperationException异常。