如何通过泛型类型实例化? [复制]

Posted

技术标签:

【中文标题】如何通过泛型类型实例化? [复制]【英文标题】: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
    

【问题讨论】:

【参考方案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");
    

【讨论】:

以上是关于如何通过泛型类型实例化? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

实例化泛型类时如何避免指定冗余类型

如何在基类中实例化泛型类型?

泛型动态实例化

从泛型类型快速实例化

在C#中实例化泛型类型的实例

递归泛型类型的实例化速度越慢,嵌套越深。为啥?