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