2013-02-27 76 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

相关问题