Java无法调用addAll()将子类类型的arraylist添加到类型<?扩展baseClass>

我有两个类,一个超类和一个继承该超类的子类。我想将两个数组列表合并为一个。这两个数组列表具有不同的类型。一个是超类列表,另一个是子类。

这是我的三个列表:

public ArrayList<subClass> list1;
public ArrayList<superClass> list2;

public ArrayList<? extends superClass> combined; // so this accepts all subclasses as well

然后我要完成以下任务:

combined.addAll(list1);
combined.addAll(list2);

编译器在说:

addAll in arrayList cannot be applied to list1
addAll in arrayList cannot be applied to list2

但是:combined = list1;没有错误。尽管不能将两个列表合并在一起,但带有等号。

我该如何实现?

huangjinyibj 回答:Java无法调用addAll()将子类类型的arraylist添加到类型<?扩展baseClass>

public ArrayList<? extends superClass> combined

并不意味着“这也接受所有子类”。这意味着您可以为该变量分配ArrayList<superClass>ArrayList<subClass>ArrayList<someOtherSubClass>等...

由于编译器不知道将哪个list1分配给该变量,因此您无法为其分配list2ArrayList<? extends superClass>的元素。

例如,如果您使用以下方法初始化了该变量:

public ArrayList<? extends superClass> combined = new ArrayList<subClass2>();

您不应添加到List类型的subClass实例中。

您可以使用:

public ArrayList<superClass> combined

相反。现在,您可以将ArrayList类型的所有元素或其任何子类添加到superClass中。

本文链接:https://www.f2er.com/3158423.html

大家都在问