>我需要将一些对象(具有不同类型(的一组列表传递到函数中,但它不起作用。有人可以解决问题吗?
代码示例:
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>>
,您不能向Set
添加任何内容(文字null
除外(。