【问题标题】:Java reflection multiple parametersJava反射多参数
【发布时间】:2013-07-31 10:12:09
【问题描述】:

我正在尝试使用 Java 反射,我有两种不同的方法可以调用。其中一个有一个字符串参数,第二个有两个字符串参数。我已经设法让第一个工作,但仍然在为第二个苦苦挣扎。我检查了对其他两个问题(Java reflection: getMethod(String method, Object[].class) not workingHow to invoke method with variable arguments in java using reflection?)的引用,但不幸的是没有运气。我不断收到以下异常:

java.lang.NoSuchMethodException: controllers.InventoryController.combineItems([Ljava.lang.String;)
at java.lang.Class.getMethod(Unknown Source)

这是我的工作部分代码:

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

现在这是我无法工作的部分:

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

传递多个参数的正确方法是什么?

【问题讨论】:

  • 你试过了吗:method.invoke(this, commandParts[1], commandParts[2]);
  • 是的,没有运气。同样的错误:-/
  • 您尝试调用的方法的签名是什么?
  • 它的public void combineItems(String componentName1, String componentName2){//method body}

标签: java reflection


【解决方案1】:

错误是因为

Method method = cls.getMethod(commandParts[0], paramString[0]);

这表示返回方法名称“commandParts[0]”只有​​一个类型为“paramString[0]”的参数 改变这个

Method method = cls.getMethod(commandParts[0], String.class, String.class);

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多