2013-02-27 83 views
1

我的代碼是這樣的:拋出:IllegalArgumentException試圖調用方法

Class<?> targetClass = Class.forName(class_name); 
mthd = targetClass.getDeclaredMethod(function_name, new Class[]{Object.class}); 
mthd.invoke(new Object()); //fails 

爲什麼當過我嘗試調用我的方法IllegalArgumentException被拋出?

java.lang.IllegalArgumentException 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
... 

我失蹤了?

UPDATE: 被調用的函數是:

public static String categoryCount(Object val){ 
     System.out.println(val.toString()); 
     return null; 
    } 
+1

你能提供您試圖調用的方法簽名? – sp00m 2013-02-27 10:30:15

+0

請檢查更新.. – Hilmi 2013-02-27 10:30:58

回答

4

mthd.invoke需要在你的情況下,兩個參數。 首先是運行被調用方法的對象,其次是categoryCount(val)的參數。

在一個靜態方法(像你這樣)的情況下使用:

mthd.invoke(null, new Object()); 

對於非靜態方法,使用方法:

mthd.invoke(myObj, new Object()); 
+0

謝謝真的謝謝 – Hilmi 2013-02-27 10:58:33

2
Class<?> clazz = Class.forName(class_name); 
Method method = clazz.getMethod("categoryCount", Object.class); 
Object o = method.invoke(null, new Object()); 

做工精細

+0

只有'categoryCount'是一個靜態方法才能正常工作。 – sp00m 2013-02-27 10:39:05

+0

根據這個問題。 – DominikM 2013-02-27 10:41:05

+0

你說得對,我的錯。 – sp00m 2013-02-27 10:42:47

相關問題