【问题标题】:How to instantiate by generic type? [duplicate]如何通过泛型类型实例化? [复制]
【发布时间】:2014-11-04 08:38:02
【问题描述】:

是否可以在抽象类中实例化作为泛型类型参数提供的类?

例子:

public MyClass {
    public MyClass(String test) {

    }
}

是否可以在另一个抽象类中实例化这个类?

public abstract class AbstractClass<T extends MyClass> {
    public AbstractClass() {
        T t = new T("test"); //Cannot instantiate the type T
    }
}

【问题讨论】:

    标签: java generics


    【解决方案1】:

    这不是那么直截了当。

    你需要一个Class&lt;T&gt;,它会在类型擦除之后保存泛型类型。

    然后,您必须调用Class#getDeclaredConstructor(Class&lt; ? &gt; .. params) 来触发所需的构造函数并动态创建新实例。例如:

    public abstract class AbstractClass<T extends MyClass> {
        public AbstractClass(Class<T> clazz) {
            T t = clazz.getDeclaredConstructor(String.class).newInstance("test");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多