2013-10-15 33 views
0

我試圖編寫一個控制檯程序,要求用戶輸入一個類的名稱。它將採用這個類名稱,加載它 - 然後創建它的一個實例,以便我可以調用方法等等。Java:從用戶輸入的加載類

我該如何去做這件事?

到目前爲止,我已經使用掃描儀來獲得輸入。但現在我已將類名稱作爲字符串。我不太確定如何加載它,然後創建它的一個實例。

任何幫助,將不勝感激。

回答

3

此問題取決於該類是否存在於應用程序的當前類路徑上下文中。

如果確實如此,那麼它的使用類似的簡單情況......

String nameOfClass = ...; 
Class classOfName = Class.forName(nameOfClass); 
Object instance = classOfName.newInstance(); 

(注:這些拋出了一系列你將有望趕上例外)。

再仔細看看java.lang.Class更多細節

如果類沒有當前的類加載器上下文中存在,那麼您將需要創建自己的類加載器和類裝入,並使用類加載器加載和創建類

的情況下,採取在java.lang.ClassLoaderjava.net.URLClassLoader更多細節仔細一看......

3
Class myClass = Class.forName(userInputString); 
Object o = myClass.newInstance(); 

當然,你會投o到你想要的類。有關更多詳細信息,請參閱Class

+0

不知道有關'的forName()'方法!非常有幫助,非常感謝。 – Ogen

+3

只是一個說明,你不能命名你的變量'class'(因爲它是一個保留字) –

+0

偉大的一點。有時候我並不那麼光明。做出改變。謝謝。 – Vidya

0

您可以使用Class.forName()

Class someClass = Class.forName(your_class_name) //must be with package. 
Object o = someClass.newInstance(); 

你可以閱讀更多關於它here

+0

如果我需要使用'getFields()'和'getMethods()'等方法,我不需要它的實例嗎?我只需要'Class'變量? – Ogen

+0

是的,這是正確的。 – lazyprogrammer