您的位置:首页 > 大数据 > 人工智能

反射调用main方法注意事项

2014-04-11 10:34 351 查看
尽管在通过反射调用一个类的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方法接收到,一看是一个对象,就不会再进行拆分,则可将该字符串数组传递过去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: