作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有代码(完整源代码):
public class AutoConversionTest {
@Test
public void test_autoConversion() {
Wrapper wrapper = new Wrapper();
wrapper.setList(new ArrayList<Sub>());
wrapper.addAll(new ArrayList<Sub>());
}
class Wrapper {
List<? extends Super> list;
public void setList(List<? extends Super> list) {
this.list = list;
}
public void addAll(List<? extends Super> list) {
this.list.addAll(list); //TROUBLES!
}
}
class Super {}
class Sub extends Super {}
}
问题:Wy错误以及如何解决它?
已编辑:我的错误日志
java: no suitable method found for `addAll(java.util.List<? extends expectations.public_method.experiments.AutoConversionTest.Super>)`
method `java.util.List.addAll(int,java.util.Collection<? extends expectations.public_method.experiments.AutoConversionTest.Super>)` is not applicable (actual and formal argument lists differ in length)
method `java.util.List.addAll(java.util.Collection<? extends expectations.public_method.experiments.AutoConversionTest.Super>)` is not applicable (actual argument `java.util.List<? extends expectations.public_method.experiments.AutoConversionTest.Super>` cannot be converted to `java.util.Collection<? extends expectations.public_method.experiments.AutoConversionTest.Super>` by method invocation conversion)
最佳答案
List<? extends Super>
表示:一些未知类型的列表,它扩展了 Super。因此,您不能向此类列表添加任何内容(null 除外),因为您不知道其元素的类型。如果编译器允许这样做,您可以添加 OtherSub
的实例。到 List<Sub>
,这会破坏列表的类型安全。
更改 Wrapper.list
的类型至 List<Super>
.
编辑:
修改后的代码:
class Wrapper {
List<Super> list;
public void setList(List<? extends Super> list) {
this.list.clear();
this.list.addAll(list);
}
public void addAll(List<? extends Super> list) {
this.list.addAll(list);
}
}
关于java - 泛型:尝试将参数化集合传递给 List addAll 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943476/
我是一名优秀的程序员,十分优秀!