考虑这个基类:
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
如何生成通用抽象基类的派生列表?
最佳答案
如果将两种类型都添加到列表中,类型信息将会丢失。因此,您将只知道该列表包含 TestGenericList
未知类型的对象 <?>
.
List<TestGenericList<?>> genericList = new ArrayList<TestGenericList<?>>();
这对您的情况可能就足够了,但您应该始终考虑这是否是您想要的。后面丢了为什么要引入类型信息?有些情况下它是有意义的。例如。看看 Collections.disjoint(Collection<?> c1, Collection<?> c2)
.
关于java - 从通用抽象类创建派生实例列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21722060/