gpt4 book ai didi

java - 为什么通过 方法向 List 添加元素(类型正确)会出现编译错误?

转载 作者:行者123 更新时间:2023-12-01 13:36:26 25 4
gpt4 key购买 nike

我对泛型通配符概念没有什么疑问。

1.假设我有一个方法:void write(List<?> list)我用 List<Dog> list 来调用它, write(list)并尝试添加 write() 像 list.add(new Dog())是编译错误,为什么呢?

我的理解是指未知类型并且可以接受任何类型,因此如果我使用 Dog 类型进行调用,那么它应该允许将 Dog 添加到列表中...我在这里推断出什么错误?

2.现在,如果我使用有界通配符,write(List<? super Dog> list>它解决了上述问题,为什么呢?这允许我将狗添加到列表中但是根据对? super 狗的理解...它应该允许狗和狗的 super ...所以我应该能够将动物也添加到列表中?但出现编译错误。

我认为这个问题是因为write(List<? super Dog> list>只允许我使用 Dog 的任一列表或 super 列表调用 write() ,一旦您使用类型调用它...您只能添加到该类型的列表中,我对吗?

提前致谢..

最佳答案

Let say i have a method: void write(List list) and i call this with a List list,write(list) and trying to add in write() like list.add(new Dog()) is a compilation error, why?

?是泛型中的通配符运算符,现在它的意思是您不完全知道 List 是什么样的你正在得到。那么你如何确定它可以是 ListDog s。如果是List<Cat>那么你的write方法会添加 Dog到它。所以 Java 限制你这样做。

Now, if i use bounded wild cards, write(List list> it solves the above problem, why?

? super Dog代表 Dog 的任何父类(super class),包括它自己。所以当你得到 List<? super Dog>write你知道列表是 List<Object> or List<Dog> 的列表。在这两种情况下,添加新的 Dog 都是安全的。到列表中。

关于java - 为什么通过 <?> 方法向 List 添加元素(类型正确)会出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231251/

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