繁体   English   中英

调用反射Class.getMethod时发生异常

[英]Exception when invoke reflection Class.getMethod

我下面有代码调用使用反射的方法。 但我明白了

java.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...) -方法需要,因为它是第一个参数,该方法应该被调用(如你做正确的)对象, 然后作为一个可变长度的参数应该传递方法调用的所有参数。

在您的情况下,您忘记了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()不正确

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM