尝试调用方法时出现IllegalArgumentException

时间:2013-02-27 10:27:32

标签: java reflection 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)
...

我缺少什么?

更新: 被调用的函数是:

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

2 个答案:

答案 0 :(得分:4)

在您的情况下,

mthd.invoke需要两个参数。 第一个是运行被调用方法的对象,第二个是categoryCount(val)的参数。

如果是静态方法(就像你一样),请使用:

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

对于非静态方法,请使用:

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

答案 1 :(得分:2)

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

工作正常