调用反射时异常



我有下面的代码调用一个方法使用反射。但我得到,

. 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()是不正确的

最新更新