我有下面的代码调用一个方法使用反射。但我得到,
. lang。IllegalArgumentException:参数数目错误
异常在Method.invoke。原因是什么?
public class B {
public static void main(String[] args) {
A a = new A();
Method m;
try {
m = a.getClass().getMethod("m3",Integer.class);
m.invoke(a);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class A {
public void m3(Integer x){
System.out.println("ssss");
}
}
invoke(Object, Object...)
-method的第一个参数是应该在上调用方法的对象,然后作为一个可变长度参数,应该将传递给方法调用的任何参数。
在您的例子中,您忘记了方法Integer
-parameter。您尝试调用的方法是A.m3()
,它在类中不存在。
正确的调用应该是:
m.invoke(a, 12); // or any int/Integer as it's second parameter
查看原始method .invoke()方法签名-
public Object invoke(Object obj,
Object... args)
throws IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
没有重载版本。所以你的方法调用- m.invoke()
是不正确的