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



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

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

相关内容

  • 没有找到相关文章

最新更新