我有下面的代码,它使用反射来调用方法。但我得到了,
Method.invoke中的java.lang.IllegalArgumentException:参数数量错误
异常。是什么原因?
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");
}
}
答案 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);
}
不正确