Java泛型集合和继承

Tom*_*Tom 1 java generics collections inheritance

基本上我需要一个抽象类,它包含一个列表的字段,详细说明它可以保存某个类的子类,然后创建一个存储该特定类的特定子类的具体类.

在代码中更好地解释我肯定:

public class A {
}

public class B extends A {
}

public abstract class AbsClass {
    protected List<? extends A> list;
}

public class ConClass extends AbsClass {
    list = new ArrayList<B>();
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码我得到编译器错误

该方法在类型List <capture#3-of中添加(捕获#3-of?extends A)?extends A>不适用于参数(B)

列表实例化的行.

我怎样才能让它发挥作用?

Mar*_*ers 7

你能打字AbsClass吗?

public abstract class AbsClass<T extends A> {
    protected List<T> list;
}

public class ConClass extends AbsClass<B> {
    list = new ArrayList<B>();
}
Run Code Online (Sandbox Code Playgroud)

当然,在这一点上,甚至没有必要将实例化移动到子类:

public abstract class AbsClass<T extends A> {
    protected List<T> list = new ArrayList<T>();
}

public class ConClass extends AbsClass<B> {
    //... other stuff ...
}
Run Code Online (Sandbox Code Playgroud)