【问题标题】:Java generic collections and inheritanceJava 泛型集合和继承
【发布时间】:2011-03-29 20:11:11
【问题描述】:

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

我确信在代码中得到更好的解释:

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>();
}

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

List 不适用于参数 (B)

列表被实例化的那一行。

我怎样才能让它工作?

【问题讨论】:

  • 关于你的编译错误:你遗漏了细节。此错误与尝试调用方法 list.add 有关,与您的分配无关。您的代码由于其他原因无法编译;即赋值发生在构造函数或初始化块之外。
  • 对我来说很好......应该......
  • @glow: A 是一个类,而不是类型参数。有点误导,因为它是一个字符,但它是一个常见的假类名,并且包含在问题中。

标签: java generics inheritance collections


【解决方案1】:

你能直接输入AbsClass吗?

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

public class ConClass extends AbsClass<B> {
    list = new ArrayList<B>();
}

当然,此时甚至不需要将实例化移动到子类:

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

public class ConClass extends AbsClass<B> {
    //... other stuff ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多