使用反射调用String []参数的方法

时间:2013-07-24 20:03:25

标签: java reflection parameters

我已经使用了我在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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

方法my_method()作为参数收到String[],而不是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]);

答案 1 :(得分:1)

您需要打印args[i]而不是打印。

此外,应使用new String[]而不是new Object[]来调用此方法。