我在使用Java中的反射時遇到了一些麻煩。我試圖保存一個數據結構的方法,但得到一個錯誤。該錯誤是Java,反射,獲取類的方法
java.lang.NoSuchMethodException: cs671.eval.SerialList.add(java.lang.Integer, java.lang.String)
的方法,在這種情況下,我想要得到的是一個SerialList是採取了類似和對象作爲參數add方法。
structType = "cs671.eval.SerialList"
,keyType = "java.lang.Integer"
和valType = "java.lang.String"
是從文件讀入的字符串。
Class dataClass = null, comparableClass = null, objectClass = null;
try{ // create data structure
dataClass = Class.forName(structType);
comparableClass = Class.forName(keyType);
objectClass = Class.forName(valType);
}
catch(ClassNotFoundException e){}
java.lang.Object structObj = null;
try{ // Create a data structure object
structObj = dataClass.newInstance();
}
catch(Exception e){}
Method m = null;
try{ // Attempt to get add method for the data structure
m = dataClass.getMethod("add", comparableClass, objectClass); // This is where it fails
}
catch(Exception e){}
基本上我試圖讓與該會得到傳遞到該方法的正確課程的權利數據結構正確的方法,但我不知道怎麼告訴實現getMethod方法,這些類(可比的類和對象類)是正確的。
在此先感謝!
補充:這裏的SerialList的add方法簽名 public void add(java.lang.Comparable, java.lang.Object)
'cs671.eval.SerialList.add'的簽名是什麼? – Polygnome
您是否嘗試過運行Class.getMethods並打印名稱/參數類型列表?如果例如SerialList擴展了ArrayList,那麼Add方法實際上就是add(int,Object)。 –
Sbodd
@Polygnome:Addes簽名發佈。 –