【问题标题】:Instantiate Java anonymous inner class with generic using Class in variable使用变量中的类用泛型实例化 Java 匿名内部类
【发布时间】:2013-11-24 20:52:18
【问题描述】:

在 Java 7 中是否可以使用我手头的 Class 对象实例化具有泛型类型的匿名内部类?

这是我试图实例化的泛型类的简化版本:

abstract class DomainBuilder<E> {

    private final Class<E> entityClass

    public DomainBuilder() {
        this.entityClass = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

    ...
}

当我在编译时指定要构建的类时创建一个匿名内部类可以正常工作:

DomainBuilder builder = new DomainBuilder<MyDomainClass>() {}

我希望能够做到这一点,这样我就可以使用我在运行时这样确定的Class 变量,但还没有弄清楚如何:

Class clazz = MyDomainClass.class
...
DomainBuilder builder = new DomainBuilder<clazz>() {}

我也尝试过按照这些思路创建方法,但没有运气:

Class clazz = MyDomainClass.class
DomainBuilder builder = builderFor(clazz)

public static DomainBuilder<T> builderFor(Class<T> t) {
    return new DomainBuilder<T>(entityManager){}
}

这样的事情可能吗?

【问题讨论】:

    标签: java generics instantiation anonymous-inner-class


    【解决方案1】:

    Class 对象被直接传入时,您必须创建一个完全独立的构造函数。您无法以您尝试的方式再次推断它。

    【讨论】:

    • 所以你的意思是我的DomainBuilder 采用Class 参数并直接设置该变量?这可能适用于我的用例,感谢您的建议。
    【解决方案2】:

    我希望能够做到这一点,以便我可以使用 Class 变量 我已经在运行时确定了这样,但还没有弄清楚如何 然而:

     Class clazz = MyDomainClass.class ... DomainBuilder 
     builder = new  DomainBuilder<clazz>() {}
    

    我们实际上不能这样做。因为这样做,我们不是在对角线&lt;&gt; 中定义class Type,而是传递claszz 类型的Class 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多