2012-07-11 64 views
0

我不確切地知道如何定義我的疑問,所以如果問題已被問到,請耐心等待。Java:當你知道超類時反映鑄造

比方說,我必須動態實例化一個對象。這個對象肯定是一個已知的,不可變的類A的子類的實例。我可以動態地獲得特定的實現類。

它會更好使用反射完全一樣,如果我不知道目標類東西,還是會preferrable /可能做這樣的事情:

A obj = (Class.forName("com.package.Sub-A")) new A(); 

哪裏Sub-A extends A?其目的是避免反射開銷倍......

+0

此代碼不能編譯。它甚至沒有意義。 'new A()'的結果是A,而不是A的類,或者它的任何子類的類。請優化您的問題。 – EJP 2012-07-11 10:48:43

回答

1

通常,這是通過

Class.forName("com.package.Sub-A").getConstructor(param types).newInstance(param values) 

完成,以避免反光overherad,你只是緩存構造對象。

+0

謝謝,以及「緩存構造函數對象」是什麼意思? – Ema 2012-07-11 09:18:33

+0

getConstructor(...)將類型爲(Surprise !!!!)的對象傳遞給java.lang.reflect.Constructor - 並且此對象可用於創建此類的多個表達式。 – 2012-07-11 10:51:56

+0

明白了,非常感謝。 – Ema 2012-07-12 10:05:52