2011-09-20 55 views
-2

我在此代碼中遇到了投射問題,但不知道如何更正它。在Java中使用反射時出錯

public void showFrame(String className, Object controller) throws Exception{ 
    try { 
     Class c = Class.forName("com." + className); 
     // "(Object.class)" I want this to be of type held in className var 
     // this type will be same as one passed into "controller" at runtime 
     Constructor ctr = c.getConstructor(Object.class); 
     ctr.newInstance(controller); 
    } catch (ClassNotFoundException ex) { 
     JOptionPane.showMessageDialog(null, "Error"); 
    } 
} 
+0

當你決定哪個答案是最有幫助的你,將其標記爲通過點擊複選框大綱答案左側的接受的答案。 http://stackoverflow.com/faq#howtoask – Andrey

+0

請提供一個完整但最小的例子,包括a)一個包含構造函數的示例類b)對該類的'showFrame'的實際調用。 –

回答

5

getConstructor從相關類的可能存在的構造函數中進行選擇。

如果你的類名看起來像:

com.mycorp.SomeClass 

,它不具有

public SomeClass(Object object) { 
    ... 
} 

構造,然後ctr將無效。如果它確實有這樣的構造函數,那麼要求提供一個新實例而不提供Object參數的值只是要求麻煩。

另外,如果類不存在,不能找到構造函數,或者安全管理器拒絕新的類創建,或者構造函數調用的編號錯誤的參數等