[英]Set of Lists with wildcarded generic as a parameter in method
我需要將一些對象(具有不同類型)的一組列表傳遞給一個函數,但它不起作用。 有人可以解決問題嗎?
代碼示例:
public class Main {
public static void main(String[] args) {
Set<String> set = Set.of("1");
print(set); //ok
Set<List<String>> setOfList = Set.of(List.of("1"));
print2(setOfList); //doesn't work
}
static void print(Set<? extends CharSequence> set) {
System.out.println(set);
}
private static void print2(Set<List<? extends CharSequence>> setOfList) {
System.out.println(setOfList);
}
}
也為set元素添加上限:
Set<? extends List<? extends CharSequence>>
原因是你可以添加任何List<? extends CharSequence>
List<? extends CharSequence>
為Set<List<? extends CharSequence>>
Set<List<? extends CharSequence>>
。 例如,您可以添加List<StringBuilder>
。
private static void print2(Set<List<? extends CharSequence>> setOfList) {
setOfList.add(List.of(new StringBuilder());
}
如果你被允許從main
調用該方法,那么如果你做了類似這樣的事情,你會得到一個ClassCastException
:
Set<List<String>> setOfList = Set.of(List.of("1"));
print2(setOfList); // pretend it works...
for (List<String> list : setOfList) {
String s = list.get(0); // ClassCastException, it's a CharBuffer.
}
通過Set<? extends List<? extends CharSequence>>
Set<? extends List<? extends CharSequence>>
Set<? extends List<? extends CharSequence>>
,你不能向Set
添加任何東西(除了文字null
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.