调用反射Class.getMethod时的异常

时间:2015-05-30 13:03:59

标签: java reflection illegalargumentexception

我有下面的代码,它使用反射来调用方法。但我得到了,

  

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");
    }
}

2 个答案:

答案 0 :(得分:3)

invoke(Object, Object...)-method采用第一个参数作为 on (正如您所做的那样)调用该对象的对象,然后然后作为可变长度参数的任何参数,应该通过传递给方法调用。

在您的情况下,您忘记了方法Integer - 参数。您尝试调用的方法是A.m3(),该类在该类中不存在。

正确的电话会是:

m.invoke(a, 12); // or any int/Integer as it's second parameter

答案 1 :(得分:0)

查看原始的Method.invoke()方法签名 -

m.invoke()

它没有重载版本。因此,您的方法调用 - Intent intent = new Intent(SplashActivity.this, FirstActivity.class); startActivityForResult(intent, 10); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Intent intent = new Intent(SplashActivity.this, SecondActivity.class); startActivity(intent); } 不正确