在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){}
}
这样的事情可能吗?
答案 0 :(得分:1)
我希望能够使它能够使用一个Class变量 我已经在这样的运行时确定了,但还没弄明白该怎么做 又:
Class clazz = MyDomainClass.class ... DomainBuilder builder = new DomainBuilder<clazz>() {}
我们实际上不能这样做。因为通过这样做,我们没有在对角线class Type
中定义<>
,而是传递类型为claszz
的对象Class
。
答案 1 :(得分:1)
在直接传递Class
对象时,您必须创建一个完全独立的构造函数。你无法再以你想要的方式推断它。