从通用抽象类创建派生实例列表

时间:2014-02-12 08:08:19

标签: java generics abstract-class

考虑这个基类:

public abstract class TestGenericList<T> {

    public TestGenericList() {
    }

    protected abstract void doSomething();
}

现在,有两个派生类:

public class DerivedA extends TestGenericList<DerivedA> {

    @Override
    protected void doSomething() {
        //
    }
}
public class DerivedB extends TestGenericList<DerivedB> {

    @Override
    protected void doSomething() {
        //
    }
}

申请类:

public class TestListMain {

    public static void main(String[] args) {
        DerivedA dA = new DerivedA();
        DerivedB dB = new DerivedB();

        List<TestGenericList> genericList = new ArrayList<TestGenericList>();
        genericList.add(dA);
        genericList.add(dB);
    }
}

创建列表的行会发出以下警告:

TestGenericList is a raw type. References to generic type TestGenericList<T> should be parameterized

如何生成通用抽象基类的派生列表?

2 个答案:

答案 0 :(得分:2)

如果将两种类型添加到列表中,类型信息将会丢失。因此,您只会知道该列表包含未知类型TestGenericList的{​​{1}}个对象。

<?>

在您的情况下这可能就足够了,但您应该始终考虑这是否是您想要的。为什么在以后丢失时会引入类型信息?有些情况下它是有道理的。例如。看看Collections.disjoint(Collection<?> c1, Collection<?> c2)

答案 1 :(得分:2)

TestGenericList<T>是泛型类型声明,您将其用作原始类型。在这里,您应该使用TestGenericList<DerivedA>TestGenericList<?>来删除警告。