2013-02-05 66 views
4

看:獲取類的Class.forName低於這條線

targetClass = Class.forName(className).newInstance().getClass(); 

我在這裏的問題是,爲什麼他叫的newInstance()的getClass();

難道是足夠寫

targetClass = Class.forName(className); 

+1

是的,不需要創建新實例 –

回答

3

沒有意義調用newInstance().getClass(),因爲它將產生與其實例化的實例相同的Class實例。

相反,它會創建一個額外的實例,該實例將被立即「刪除」。即使它不起作用,如果該類沒有默認的構造函數。

此外,實例化,初始化等的成本可能是顯着的。

2

是的。

Class<T> targetClass = Class<T>.forName(className); 

而對象創建更好地使用getConstructor。

T obj = targetClass.getConstructor().newInstance(); 

調用Class.newInstance表現出javadoc中提到的問題。