我在看这个问题
How do I invoke a Java method when given the method name as a string?
并应用第一个答案所说的
这是我用dyanmically调用方法的代码,它的参数是一个字符串数组
java.lang.reflect.Method method;
try {
String [] requiredParameters = testService.getRequiredParameters();
String [] parameters = new String[requiredParameters.length];
for (int i = 0; i<requiredParameters.length ; i++){
String valueRequiredParameter = request.getParameter(requiredParameters[i]);
parameters[i] = valueRequiredParameter;
}
method = new TestRecommendations().getClass().getMethod(service, parameters);
} catch (SecurityException e) {
// exception handling omitted for brevity
} catch (NoSuchMethodException e) {
// exception handling omitted for brevity
}
我在getMethod
状态下遇到编译器错误:
The method getMethod(String, Class<?>...) in the type Class<capture#1-of ? extends TestRecommendations> is not applicable for the arguments (String, String[])
这是我想要动态调用的方法
public ResultSet level0ForUser(String ... userURI) {
答案 0 :(得分:2)
你传递的参数类型错误。您的getMethod
来电接受一个String
个实例和多个Class
个实例。而且您尝试传递一个String
和String
数组
getMethod(String name, Class<?>... parameterTypes)
返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定公共成员方法。 name参数是一个String,指定所需方法的简单名称。 parameterTypes参数是一个Class对象的数组,它以声明的顺序标识方法的形式参数类型。如果parameterTypes为null,则将其视为空数组。
所以你需要传递Class
var arg,它包含所需方法的所有参数类型。对于你的方法,你应该写一些类似的东西:
Method m = TestRecommendations.class.getMethod("service", String[].class);
答案 1 :(得分:2)
使用类似的方法获取方法:
Method m = TestRecommendations.class.getMethod("level0ForUser", String[].class);
并调用:
m.invoke(new TestRecommendations(), new Object[] { new String[]{ "A", "B", "C" } } );