使用变量中的Class实例化Java匿名内部类

时间:2013-11-24 20:52:18

标签: java generics instantiation anonymous-inner-class

在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){}
}

这样的事情可能吗?

2 个答案:

答案 0 :(得分:1)

  

我希望能够使它能够使用一个Class变量   我已经在这样的运行时确定了,但还没弄明白该怎么做   又:

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

我们实际上不能这样做。因为通过这样做,我们没有在对角线class Type中定义<>,而是传递类型为claszz的对象Class

答案 1 :(得分:1)

在直接传递Class对象时,您必须创建一个完全独立的构造函数。你无法再以你想要的方式推断它。