我需要将一些对象(具有不同类型)的一组列表传递给一个函数,但它不起作用。有人可以解决问题吗?
代码示例:
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<? extends List<? extends CharSequence>>
原因是您可以添加任何 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>>
,您不能向 null
添加任何内容(文字 Set
除外) .
关于java - 带有通配符泛型的列表集作为方法中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334304/