2011-08-02 207 views
0

爲什麼我們需要使用動態類加載?當我們第一次使用它們時,類會被加載,所以如果我們不使用類,它將永遠不會被加載。 即使我們使用動態類加載:動態類加載

A a =(A)Class.forName(「A」)。newInstance();

我們在編譯時仍然需要了解A類。如果我們需要使用A類,我們可以使用構造簡單地創建它(和它會被加載到內存中):

A a = new A(); 

如果我們不需要任何類的實例,其中包含構造函數的調用代碼的類永遠不會被執行,所以它永遠不會被加載到內存中

回答

5

您不需要在編譯時瞭解該類。
您可以從配置文件中讀取類名,然後將其轉換爲接口,而不用硬編碼任何類名。

考慮

SomeInterface a = (SomeInterface)Class.forName(config.readSomething()).newInstance(); 
1

我們還是要知道在編譯時的類。

啊哈...

public interface Foo {..} 
在一個單獨的jar

public class Bar implements Foo{..} 

然後

Foo f = (Foo)Class.forName("Bar").newInstance();