调用反射时出现异常 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...)-methodfirst 参数作为应该调用该方法的对象 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() 不正确