2013-03-12 57 views
2

假設我使用file.list()來獲取src文件夾中的所有文件。假設一個文件名稱爲Problem0001.java。是否可以僅使用字符串「Problem0001.java」調用Problem0001.java類的方法?使用Java中的類文件名字符串調用靜態方法

更深入的解釋: 我正在研究項目歐拉的問題。歐拉計劃是一系列需要數學和編程知識的問題。我希望每個問題都能解決,它是自己的課程。我決定,如果我可以創建一個菜單,然後輸入問題編號並在屏幕上顯示答案,那將會非常棒。我開始用一個switch語句來調用具有問題解決方案的類。每當我解決一個新問題時,我想最終我會厭倦添加switch語句。我想讓計算機查找所有解決方案類文件,並將解決方案的編號放入列表中(因爲我可能會跳過一些問題)。每當我進入菜單屏幕時,列表將被打印出來。我輸入我想要查看的解決方案的編號,這是我失去的部分。我不知何故需要採取這個數字,並調用具有相同數字的類的靜態方法。所以如果我輸入3,class000將會激活class0003.java,或者編譯器工作。

回答

5

當你有一個類名,你將不得不使用ClassLoader獲得的.class

Class<?> clazz = Class.forName("org.someorg.SomeClass"); 

保持一旦你有,你可以通過調用靜態方法在運行時加載的類Reflection

Method method = clazz.getMethod("methodName", String.class); 
method.invoke(null,"someString"); 

注意:假設該方法採用字符串作爲參數String.class

+0

請憐憫我。什麼是「org.someorg.SomeClass」。這是否與網站上的東西有關?我只是在當地工作。我會將它替換爲我的目錄嗎? – Nugenrules 2013-03-12 06:57:14

+0

這是一個命名軟件包的標準:http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html這會幫助你。 – 2013-03-12 06:59:37

+0

非常感謝。花了我一天的時間閱讀如何使其工作。最後。順便說一句,我試圖調用(null,null),但它似乎你需要在Invoke(object,null)中放入一個對象;或者我不知道我在說什麼,但它似乎只在我這樣做時才起作用。 – Nugenrules 2013-03-13 03:40:15

3

是的,你可以使用java Reflection API

看看如何在運行時調用方法的example

+0

有趣。我沒有在課堂上教過。我會讀這個並立即嘗試它! – Nugenrules 2013-03-12 06:36:40

+0

是的它非常有趣!祝你好運:) – codeMan 2013-03-12 06:54:32

相關問題