在方法中将通配符泛型作为参数的列表集



>我需要将一些对象(具有不同类型(的一组列表传递到函数中,但它不起作用。有人可以解决问题吗?
代码示例:

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除外(。

最新更新