Java 从泛型抽象类创建派生实例列表
考虑这个基类:Java 从泛型抽象类创建派生实例列表,java,generics,abstract-class,Java,Generics,Abstract Class,考虑这个基类: public abstract class TestGenericList<T> { public TestGenericList() { } protected abstract void doSomething(); } 公共抽象类TestGenericList{ 公共TestGenericList(){ } 受保护的抽象无效doSomething(); } 现在,有两个派生类: public class DerivedA exte
public abstract class TestGenericList<T> {
public TestGenericList() {
}
protected abstract void doSomething();
}
公共抽象类TestGenericList{
公共TestGenericList(){
}
受保护的抽象无效doSomething();
}
现在,有两个派生类:
public class DerivedA extends TestGenericList<DerivedA> {
@Override
protected void doSomething() {
//
}
}
public class DerivedB extends TestGenericList<DerivedB> {
@Override
protected void doSomething() {
//
}
}
公共类DerivedA扩展了TestGenericList{
@凌驾
受保护的无效剂量测定法(){
//
}
}
公共类DerivedB扩展了TestGenericList{
@凌驾
受保护的无效剂量测定法(){
//
}
}
应用程序类别:
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);
}
}
public类TestListMain{
公共静态void main(字符串[]args){
DerivedA dA=新的DerivedA();
DerivedB=新的DerivedB();
List genericList=新建ArrayList();
一般列表。添加(dA);
一般列表。添加(dB);
}
}
创建列表的行给出以下警告:
TestGenericList is a raw type. References to generic type TestGenericList<T> should be parameterized
TestGenericList是原始类型。对泛型类型TestGenericList的引用应参数化
如何生成泛型抽象基类的派生列表?如果将这两种类型都添加到列表中,类型信息将丢失。因此,您将只知道列表包含未知类型的对象
List>();
在您的情况下,这可能足够了,但您应该始终考虑这是否是您想要的。当类型信息以后丢失时,为什么要引入它?在某些情况下,这是有道理的。例如,查看。如果将两种类型都添加到列表中,则类型信息将丢失。因此,您将只知道列表包含未知类型的对象
List>();
在您的情况下,这可能足够了,但您应该始终考虑这是否是您想要的。当类型信息以后丢失时,为什么要引入它?在某些情况下,这是有道理的。例如,看一看。TestGenericList
是一个泛型类型声明,您将其用作原始类型。这里您应该使用testgenericslist
或testgenericslist
来删除警告。testgenericslist
是泛型类型声明,您将其用作原始类型。在这里,您应该使用TestGenericList
或TestGenericList
来删除警告
List<TestGenericList<?>> genericList = new ArrayList<TestGenericList<?>>();