0

为此,我已经使用了在 StackOverflow 和其他网站上可以找到的所有建议。我正在尝试使用反射调用方法。这是我的方法的代码:

public void my_method(String[] args) {

    for(int i=0; i<args.length; i++)
    {
        System.out.println(args);
    }
}

这是我用于反射的代码

Class[] paramStringArray = new Class[1];    
paramStringArray[0] = String[].class;
String[] argu = {"hey", "there"};

Method method = cls.getDeclaredMethod("my_method", paramStringArray);
method.invoke(obj, new Object[]{argu});

我的问题是,当我运行程序时,我看到输出打印为: [Ljava.lang.String;@70a6aa31 [Ljava.lang.String;@70a6aa31

我已经尝试了所有我能找到的建议。有人可以帮我吗?

谢谢!

4

2 回答 2

1

该方法my_method()接收作为参数 a String[],而不是 a String。您正在调用不同的方法。代码应如下所示:

paramString[0] = String[].class;
Method method = cls.getDeclaredMethod("my_method", paramString);

要调用它,请传递一个String[]作为参数:

method.invoke(obj, new String[]{"x"});

此外,循环体my_method()应该引用每个元素的位置,而不是数组本身:

System.out.println(args[i]);
于 2013-07-24T20:05:32.670 回答
1

您需要打印args[i],而不是您拥有的。

该方法也应该用 anew String[]而不是new Object[].

于 2013-07-24T20:09:59.523 回答