2015-10-15 44 views
1

我必須從用戶那裏獲取類名並動態加載它。Java:基於用戶輸入的加載類

public class sample{ 
    public static void main(String[] args) { 
    if(args.length < 1) 
    { 
     print_usage(); 
    } 
    else{ 
     Class inputClass = null; 
     try { 
      inputClass = Class.forName(args[0]); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
    } 

我有一個名爲樣品2,樣品3類:

public class Sample2 { 
    private String name; 
} 

public class Sample3 { 
    private int value; 
} 

我想根據用戶輸入加載類,無論是樣品2 /樣品3類。

我有在同一目錄中的文件,但我得到java.lang.ClassNotFoundException錯誤。我如何解決這個錯誤?

+0

你的課程是在包?你已經將目錄添加到類路徑了嗎? – Jens

回答

2

請更清楚你的問題,我假設你在沒有包的情況下輸入類名。
如果它們在包中,那麼必須使用Class.forName。

Class inputClass = null; 
try { 
    inputClass = Class.forName("my.package.MyClass"); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 
+1

謝謝!這是問題所在。我沒有給出包名。 – user2761431

+0

是否可以調用'inputClass'中定義的getter/setter/normal方法?我只能使用'getDeclaredMethods()'獲得定義的方法,但我無法定義'inputClass'的實例並調用傳遞參數的方法。 – user2761431

+0

你可以嘗試使用'newInstance()'。但這真的很邪惡。 – Midnightas