反射调用main方法注意事项

来源:互联网 发布:python 计算股票beta 编辑:程序博客网 时间:2024/06/05 19:18

尽管在通过反射调用一个类的main方法是,获取main方法与获取普通方法一样的步骤,但是在调用main方法,传递参数时需要注意。

public class MainRef {public static void main(String[] args) throws Exception{Method method =MainArguments.class.getMethod("main",String[].class);//这种写法会出粗//method.invoke(null, new String[]{"1","2","3"});}}class MainArguments{public static void main(String[] args) {for(String s:args){System.out.println(s);}}}
代码中注释掉的那句,按道理没错啊。main方法接收的不就是一个字符串数组么,但是jdk的语法为了向上兼容,我们在把一个字符串数组传递过去的时候,系统会默认认为我们是把参数包裹成一个数组传递过去,得到该数组后,它会把数组按内容进行分割,这样说来,我们代码中传递过去得其实就是三个字符串了,所以会报错。解决办法:

一:

method.invoke(null, new Object[]{new String[]{"1","2","3"}});
这样我们把数组包裹进数组,系统获得之后将Object数组拆开,发现是个String数组,就把它当做main方法的参数执行。

二:

method.invoke(null, (Object)new String[]{"1","2","3"});
将String字符串强转为Object,这样main方法接收到,一看是一个对象,就不会再进行拆分,则可将该字符串数组传递过去。

0 0