gpt4 book ai didi

java - 泛型:尝试将参数化集合传递给 List addAll 方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:55 25 4
gpt4 key购买 nike

我有代码(完整源代码):

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/

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