我刚刚开始学习反思,为此我有一个小的数学应用程序。该程序包装一个逻辑类,并在运行时查看它包装的逻辑类中的方法(在本例中为加法、减法、乘法和除法)。方法如下所示。
public int add(int... args){
int result = 0;
for(int i=0;i<args.length;i++){
result+=args[i];
}
return result;
}
正如你所看到的,这个方法(所有其他方法也一样)接受int…args,所以我可以传递任意数量的int来相加。
然后我试着像那样解决数学问题
int[] params = new int[numinputs];
//populate params with what numbers the user types in.
int result = (Integer) methodToCall.invoke(logicInstance, params);
如果我这样调用它,我会在invoke()上得到一个IllegalArgumentException。
所以我猜tl:dr是:
如果被调用的方法接受了params而不是硬编码的参数,我该如何调用invoke()。
感谢:)
尝试转换为对象参数
int[] params = new int[5]
Class<?> c = Class.forName("your class");
Object t = c.newInstance();
Method m = c.getMethod("add", int[].class);
//populate params with what numbers the user types in.
int result = (Integer) m.invoke(t,(Object) params);