2013-11-24 155 views
0

Java 7中是否有可能使用我手頭有的Class對象來實例化具有泛型類型的匿名內部類?在變量中使用Class實例化Java匿名內部類

這裏的通用類,我試圖實例的簡化版本:

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

是這樣的可能嗎?

回答

1

您必須爲Class對象直接傳入時創建一個完全獨立的構造函數。你不能按照你想要的方式再次推斷它。

+0

所以,你的意思是我的'DomainBuilder'採用'Class'參數並直接設置該變量?這可能適用於我的用例,謝謝你的建議。 –

1

我希望能夠讓這個我可以使用 我已經在運行時是這樣確定的類變量,但還沒有想出如何 尚未:

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

我們實際上不能這樣做。因爲這樣做,我們沒有在對角線<>中定義class Type,而是傳遞Class類型的對象claszz