gpt4 book ai didi

java - 嵌套的通配符和子类型。如何理解类型何时兼容?

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:35 25 4
gpt4 key购买 nike

通常在解释泛型时这样说:

List<?> list = new ArrayList<?>();

这段代码(上面)会产生错误,因为编译器不知道要实例化哪种类型。

但是

List<Set<?>> list = new ArrayList<Set<?>>();

这个(上面)编译的很好

还有这个:

List<Set<?>> list = new ArrayList<Set<String>>();

不编译。

我对此感到困惑。

您能否阐明不乱搞这些事情的完全权利。

附言

我知道

List<Number> list = new ArrayList<Integer>();

不会编译,我明白为什么。

最佳答案

好的。基本上,这个问题是要了解以下两个陈述之间的区别。根据@DavidWallace 的评论...

// good
Set<?> a_set = new HashSet<String>();

// bad
List<Set<?>> a_list = new LinkedList<Set<String>>();

使用引用 a_set , 您不能向集合中添加任何内容。因此,a_set 没问题。引用HashSet<String> .

但是,使用第二个引用 a_list ,您应该能够将任何集合放入列表中。但是,LinkedList<Set<String>>只允许添加 Set<String>到列表中。因此,如果允许这样做,您将无法阻止运行时异常的发生,这会破坏系统的类型安全。

关于java - 嵌套的通配符和子类型。如何理解类型何时兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156760/

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