Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从泛型抽象类创建派生实例列表_Java_Generics_Abstract Class - Fatal编程技术网

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