考虑这个基类:
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
如何生成通用抽象基类的派生列表?
答案 0 :(得分:2)
如果将两种类型添加到列表中,类型信息将会丢失。因此,您只会知道该列表包含未知类型TestGenericList
的{{1}}个对象。
<?>
在您的情况下这可能就足够了,但您应该始终考虑这是否是您想要的。为什么在以后丢失时会引入类型信息?有些情况下它是有道理的。例如。看看Collections.disjoint(Collection<?> c1, Collection<?> c2)
。
答案 1 :(得分:2)
TestGenericList<T>
是泛型类型声明,您将其用作原始类型。在这里,您应该使用TestGenericList<DerivedA>
或TestGenericList<?>
来删除警告。