如何在java反射中从数量可变的参数获取方法

如何在java反射中从数量可变的参数获取方法,java,reflection,Java,Reflection,我需要测试一个包含大量函数的java类。我使用cucumber是为了调用一个只获取一个参数的函数,或者调用另一个具有7或8个参数的函数(幸运的是,它们都是字符串) 所以我做了一张这样的桌子: | objectname | funcname | [varX] | | objectname | funcname2 | [varY] | | objectname | funcname3 | [varZ, varX, varY] | | objectn

我需要测试一个包含大量函数的java类。我使用cucumber是为了调用一个只获取一个参数的函数,或者调用另一个具有7或8个参数的函数(幸运的是,它们都是字符串)

所以我做了一张这样的桌子:

| objectname | funcname  | [varX]             | 
| objectname | funcname2 | [varY]             |
| objectname | funcname3 | [varZ, varX, varY] |
| objectname | funcname  | [varZ]             |
在代码中,我可以转换参数变量列表中的第三列,这很容易,但我的问题是调用getMethod函数。我不想定义以下列表:

objectName.getClass().getMethod("functionName", varList.get(0).getClass());
objectName.getClass().getMethod("functionName", varList.get(0).getClass(), varList.get(1).getClass());
objectName.getClass().getMethod("functionName", varList.get(0).getClass(), varList.get(1).getClass(), varList.get(2).getClass());
....
有没有办法用类似的方法来解决这个问题

objectName.getClass().getMethod("functionName", list2ArgList);
??
类似于c版本的GetMethod
public System.Reflection.MethodInfo GetMethod(字符串名称、类型[]类型、系统.Reflection.ParameterModifier[]修饰符)

您正在谈论的方法是
Class.getMethod(字符串名称、类…参数类型)
。由于Java中的varargs只是语法糖(对于数组),因此可以执行以下操作

Class[] argList = new Class[] { String.class, String.class };
...getClass().getMethod(methodName, argList);

现在由您来动态创建argList,但是如果您只有字符串作为参数,那么您只需要获得正确的大小。

您是否说“它们都是字符串”?那么为什么不
Collections.nCopies(varList.size(),String.class)