gpt4 book ai didi

java - 泛型未经检查的警告转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:31 26 4
gpt4 key购买 nike

我在泛型中读到“?扩展对象”和“?”是同义词,那么为什么会发生这种情况。

List list=new ArrayList();
List<? extends Object> list2=list; //1
List<?> list3=list; //2

对于 1 个未经检查的转换警告被抛出,但对于 2 个则没有。所以某处的编译器肯定会区分这两者。请根据上述代码解释两者之间的区别

最佳答案

I have read in generics that "? extends Object" and "?" are synonymous

不完全是。第一个通配符有下界,第二个没有。对于你的两个例子,它应该没有什么区别(好吧,除了你只能将 null 添加到 list2list3 !)。

这个下限可以有所不同:“删除签名”(我不知道确切的术语)。

最好的例子是 Collections.max() ;您会注意到参数类型定义为 T extends Object & Comparable<? super T> .

这是因为在 Java 5 之前这个方法已经存在并且被定义为:

static Object max(Collection coll)

如果类型参数定义为 T extends Comparable<? super T> , 这意味着 1.4 中的方法必须返回 Comparable !

关于java - 泛型未经检查的警告转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27229428/

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