我已经使用了我在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
我已经尝试了所有可以找到的建议。有人可以帮帮我吗?
谢谢!
答案 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[]
来调用此方法。