如果调用的方法接受可变数量的参数,如何使用Invoke()

时间:2013-07-15 13:45:23

标签: java reflection invoke illegalargumentexception

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

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()。

谢谢:)

1 个答案:

答案 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);
相关问题