我試圖編寫一個控制檯程序,要求用戶輸入一個類的名稱。它將採用這個類名稱,加載它 - 然後創建它的一個實例,以便我可以調用方法等等。Java:從用戶輸入的加載類
我該如何去做這件事?
到目前爲止,我已經使用掃描儀來獲得輸入。但現在我已將類名稱作爲字符串。我不太確定如何加載它,然後創建它的一個實例。
任何幫助,將不勝感激。
我試圖編寫一個控制檯程序,要求用戶輸入一個類的名稱。它將採用這個類名稱,加載它 - 然後創建它的一個實例,以便我可以調用方法等等。Java:從用戶輸入的加載類
我該如何去做這件事?
到目前爲止,我已經使用掃描儀來獲得輸入。但現在我已將類名稱作爲字符串。我不太確定如何加載它,然後創建它的一個實例。
任何幫助,將不勝感激。
此問題取決於該類是否存在於應用程序的當前類路徑上下文中。
如果確實如此,那麼它的使用類似的簡單情況......
String nameOfClass = ...;
Class classOfName = Class.forName(nameOfClass);
Object instance = classOfName.newInstance();
(注:這些拋出了一系列你將有望趕上例外)。
再仔細看看java.lang.Class
更多細節
如果類沒有當前的類加載器上下文中存在,那麼您將需要創建自己的類加載器和類裝入,並使用類加載器加載和創建類
的情況下,採取在java.lang.ClassLoader
和java.net.URLClassLoader
更多細節仔細一看......
Class myClass = Class.forName(userInputString);
Object o = myClass.newInstance();
當然,你會投o
到你想要的類。有關更多詳細信息,請參閱Class。
您可以使用Class.forName()
Class someClass = Class.forName(your_class_name) //must be with package.
Object o = someClass.newInstance();
你可以閱讀更多關於它here
如果我需要使用'getFields()'和'getMethods()'等方法,我不需要它的實例嗎?我只需要'Class'變量? – Ogen
是的,這是正確的。 – lazyprogrammer
不知道有關'的forName()'方法!非常有幫助,非常感謝。 – Ogen
只是一個說明,你不能命名你的變量'class'(因爲它是一個保留字) –
偉大的一點。有時候我並不那麼光明。做出改變。謝謝。 – Vidya