gpt4 book ai didi

java - 带有通配符泛型的列表集作为方法中的参数

转载 作者:行者123 更新时间:2023-11-29 04:16:05 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com