调用反射时出现异常 Class.getMethod
Exception when invoke reflection Class.getMethod
我有以下代码使用反射调用方法。但是我得到了,
java.lang.IllegalArgumentException: wrong number of arguments
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 将 first 参数作为应该调用该方法的对象 on (正如您所做的那样正确) 和 then 作为可变长度参数应该传递给 到 方法调用的任何参数。
在您的情况下,您忘记了方法 Integer
参数。您尝试调用的方法是 A.m3()
,它在 class.
中不存在
正确的调用是:
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()
不正确
我有以下代码使用反射调用方法。但是我得到了,
java.lang.IllegalArgumentException: wrong number of arguments
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 将 first 参数作为应该调用该方法的对象 on (正如您所做的那样正确) 和 then 作为可变长度参数应该传递给 到 方法调用的任何参数。
在您的情况下,您忘记了方法 Integer
参数。您尝试调用的方法是 A.m3()
,它在 class.
正确的调用是:
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()
不正确