我正在尝试使用Java反射,我有两种不同的方法来调用.其中一个有一个String参数,第二个有两个String参数.我设法让第一个工作,但仍然在努力与第二个.我已经检查了对其他两个问题的引用(Java反射:getMethod(String方法,Object [] .class)无法正常工作以及如何使用反射在java中调用带有变量参数的方法?),但遗憾的是它们没有运气.我一直得到以下异常:
java.lang.NoSuchMethodException: controllers.InventoryController.combineItems([Ljava.lang.String;)
at java.lang.Class.getMethod(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
这是我的代码工作部分:
Class[] paramString = new Class[1];
paramString[0] = String.class;
try {
Class cls = this.getClass();
Method method = cls.getDeclaredMethod(commandParts[0], paramString);
method.invoke(this, new String(commandParts[1]));
} catch (Exception ex) {
System.out.println("Doesn't work");
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
现在这是我无法工作的部分:
Class[] paramString = new Class[2];
paramString[0] = String[].class;
try {
Class cls = this.getClass();
Method method = cls.getMethod(commandParts[0], paramString[0]);
method.invoke(this, new String[]{commandParts[1], commandParts[2]});
} catch (Exception ex) {
System.out.println("Doesn't work");
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
传递多个参数的正确方法是什么?
错误是因为
Method method = cls.getMethod(commandParts[0], paramString[0]);
Run Code Online (Sandbox Code Playgroud)
这说回归方法名称'commandParts [0]'只有一个'paramString [0]'类型的参数改变这个
Method method = cls.getMethod(commandParts[0], String.class, String.class);
Run Code Online (Sandbox Code Playgroud)