3

我刚刚开始学习反思,为此我有一个小的数学应用程序。该程序包装了一个逻辑类,并在运行时查看它为方法包装的逻辑类(在本例中为加法、减法、乘法和除法)。这些方法如下所示。

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

如果我这样调用它,我会在调用()上得到一个 IllegalArguementException。

所以我猜 tl:dr 是:

如果被调用的方法采用参数而不是硬编码的参数数量,我如何调用invoke()。

谢谢 :)

4

1 回答 1

0

尝试转换为对象参数

    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);
于 2013-07-15T14:16:14.003 回答