我的代码如下:
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;
}
mthd.invoke
在您的案例中需要两个参数。第一个是运行被调用方法的对象,第二个是categoryCount(val)
的参数。
在静态方法的情况下(就像你已经使用的(使用:
mthd.invoke(null, new Object());
对于非静态方法,使用:
mthd.invoke(myObj, new Object());
Class<?> clazz = Class.forName(class_name);
Method method = clazz.getMethod("categoryCount", Object.class);
Object o = method.invoke(null, new Object());
工作良好