这到底是什么意思 Collection<?延伸 E> c
What exactly does this mean Collection<? extends E> c
有时,很多次我在文档中看到这种情况。这让我想知道要输入什么。有人可以用清晰的简化文字向我解释这句话的意思吗:D。这是怎么回事:
ArrayList(Collection<? extends E> c)
最后变成这样:
new ArrayList<>(Arrays.asList("a","b","c"));
所以我不需要再通过谷歌搜索来询问这个"question",而是能够自己弄明白。
语法 ? extends E
表示 "some type that either is E or a subtype of E"。 ?
是通配符。
代码 Arrays.asList("a","b","c")
被推断为 return 和 List<String>
,并且 new ArrayList<>
使用菱形运算符,因此产生 ArrayList<String>
。
通配符允许您推断子类型——您可以将其分配给具有超类型的引用变量:
List<CharSequence> list = new ArrayList<>(Arrays.asList("a","b","c"));
在这里,E
被推断为 CharSequence
而不是 String
,但这是有效的,因为 String
是 CharSequence
的子类型。
List<String> testList1 = new ArrayList<>(Arrays.asList("a","b","c"));
此语句创建一个全新的 ArrayList 对象,该对象包含与使用 Arrays.asList("a","b","c") 生成的列表相同的元素。
因此,新的ArrayList和原来的String列表是完全独立的对象
仅供参考:Arrays.asList(arrAgument);
这创建了一个不可变/不可修改的 list.We 不能通过添加或删除项目来更改,因为底层字符串数组的长度不能在 运行 时间更改。如果您尝试添加或删除 java.lang.UnsupportedOperationException 将在 运行 时抛出。
有时,很多次我在文档中看到这种情况。这让我想知道要输入什么。有人可以用清晰的简化文字向我解释这句话的意思吗:D。这是怎么回事:
ArrayList(Collection<? extends E> c)
最后变成这样:
new ArrayList<>(Arrays.asList("a","b","c"));
所以我不需要再通过谷歌搜索来询问这个"question",而是能够自己弄明白。
语法 ? extends E
表示 "some type that either is E or a subtype of E"。 ?
是通配符。
代码 Arrays.asList("a","b","c")
被推断为 return 和 List<String>
,并且 new ArrayList<>
使用菱形运算符,因此产生 ArrayList<String>
。
通配符允许您推断子类型——您可以将其分配给具有超类型的引用变量:
List<CharSequence> list = new ArrayList<>(Arrays.asList("a","b","c"));
在这里,E
被推断为 CharSequence
而不是 String
,但这是有效的,因为 String
是 CharSequence
的子类型。
List<String> testList1 = new ArrayList<>(Arrays.asList("a","b","c"));
此语句创建一个全新的 ArrayList 对象,该对象包含与使用 Arrays.asList("a","b","c") 生成的列表相同的元素。
因此,新的ArrayList和原来的String列表是完全独立的对象
仅供参考:Arrays.asList(arrAgument); 这创建了一个不可变/不可修改的 list.We 不能通过添加或删除项目来更改,因为底层字符串数组的长度不能在 运行 时间更改。如果您尝试添加或删除 java.lang.UnsupportedOperationException 将在 运行 时抛出。