java - 类型不匹配错误 : Cannont convert from ArrayList<SubClass1> to List<SuperClass>

标签 java list arraylist type-mismatch

这是我的类结构,我在哪里出错

class SuperClass{
//variables
}

class SubClass1 extends SuperClass{
//variables
}

class SubClass2 extends SuperClass{
//variables
}

class AClass{
List<SuperClass> list;

public AClass(boolean b){
if(b)
list = new ArrayList<SubClass1>();//getting error here
else
list = new ArrayList<SubClass2>();//and here
}
void addObjects(SuperClass obj){
list.add(obj);
}

}

我该如何解决这个问题?我应该改变我的设计吗?怎么办?

添加:

当我变了

`List<SuperClass> list;`

List<? extends SuperClass> list;

我没有收到之前的错误,但我在添加对象时收到另一个错误,

The method add(capture#2-of ? extends SuperClass) in the type List<capture#2-of ? extends SuperClass> is not applicable for the arguments (SuperClass)

最佳答案

您似乎正在尝试创建一个仅包含来自特定子类的对象的列表。在这种情况下,您只需要泛型在编译时发挥出色。 (泛型在运行时被删除 :) )

class AClass<T extends SuperClass> {
    List<T> list;

    public AClass(){
        list = new ArrayList<T>();
    }

    void addObjects(T obj){
        list.add(obj);
    }

}

关于java - 类型不匹配错误 : Cannont convert from ArrayList<SubClass1> to List<SuperClass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533368/

相关文章:

java - 反向传播算法编程

java - Spring Boot JPA - OneToMany 关系导致无限循环

python - 展平列表列表,用特定值替换空子列表

c# - 收集的真实枚举器是如何实现的?

c# - 如何将C# linq中的groupby视为二维列表?

java - 比较两个arrayList,得到最长的匹配String

java - 无法连续搜索

java - Spring Boot : java. awt.HeadlessException

c++ - 在 Visual C++ 中检查内存泄漏的正确方法

Java用未知索引替换arraylist中的对象