我刚开始学习反思,为此我有一个小数学应用程序。 程序包装一个逻辑类,并在运行时查看它为方法包装的逻辑类(在这种情况下,加,减,乘和除)。方法如下所示。
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()上得到IllegalArguementException。
所以我猜tl:dr是:
如果被调用的方法接受参数而不是硬编码的参数,我该如何调用invoke()。
谢谢:)
答案 0 :(得分:0)
尝试转换为Object params
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);