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

标签 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

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

最佳答案

如果将两种类型都添加到列表中,类型信息将会丢失。因此,您将只知道该列表包含 TestGenericList未知类型的对象 <?> .

List<TestGenericList<?>> genericList = new ArrayList<TestGenericList<?>>();

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

关于java - 从通用抽象类创建派生实例列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21722060/

相关文章:

java - 为什么 Java 中的 Number 类不是接口(interface)而不是抽象类?

java - 为什么在单例类中必须有私有(private)构造函数

C#,实现子类定义的具体变量的抽象父类(super class)?

java - 如何在Java中将.mp4视频转换为字节数组?

c# - 当类型参数为 IEnumerable<T> 时,如何将扩展方法附加到泛型类?

java - 类中的静态泛型方法 - Java

c# - 为什么不能在泛型中要求运算符重载

java - 在 Java 的父类(super class)构造函数中调用抽象方法

logging - Java 中的异步非阻塞远程日志记录?

java - 使用 Mailgun 发送电子邮件 - 找不到 Java 类型 FormDataMultiPart 和 MIME 媒体类型 application/x-www-form-urlencoded 的消息正文编写器