在此代码中,最后一行(list1.addAll(list2);)生成编译时错误

类型List )。 extended BaseClass>不适用于参数(List )

我确实意识到,如果允许这样做,则可以将不同类的实例添加到相同的列表中。但是我不知道解决这个问题的正确方法是什么。

我的getList()方法需要返回BaseClass的子类,但我无法更改该要求。

我有这两个列表,它们以相同的方式声明并包含相同类型的对象,我需要在另一个列表中添加一个。
任何对此的想法将不胜感激。

BaseClass.java :

package main;

public class BaseClass {}

Main.java :
package main;

import java.util.ArrayList;
import java.util.List;

public class Main {

    private static List<? extends BaseClass> getList() {

        return new ArrayList<>();
    }

    public static void main(String[] args) {

        List<? extends BaseClass> list1 = getList();

        List<? extends BaseClass> list2 = getList();

        list1.addAll(list2); // Compile-time error: "The method addAll(Collection<? extends capture#3-of ? extends BaseClass>) in the type List<capture#3-of ? extends BaseClass> is not applicable for the arguments (List<capture#4-of ? extends BaseClass>)".
    }

}

最佳答案

您可以创建一个新的List<BaseClass>并将两个列表添加到该列表中:

List<BaseClass> merged = new ArrayList<>();
merged.addAll(list1);
merged.addAll(lise2);

但是让getList返回List<BaseClass>可能是一个更好的主意。

10-04 11:55
查看更多