黑马程序员技术交流社区

标题: java反射之接受数组参数成员方法反射 [打印本页]

作者: myself123    时间: 2015-8-20 12:09
标题: java反射之接受数组参数成员方法反射
mainMethod.invoke(null, new String[]{ "111","222","333"}) ;
这句代码会报“java.lang.IllegalArgumentException”异常,解决办法如下:
方法一:
mainMethod.invoke(null,new Object[]{new String[]{"xxx"}});
方法二:
mainMethod.invoke(null,(Object)new String[]{"xxx"});
原因分析:
通过反射方式来调用带有数组参数的方法时,如何为invoke方法传递参数呢?按jdk1.5的语法,整个数组是一个参数,而按jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字符串数组作为参数传递给invoke方法时,javac会到底按照哪种语法进行处理呢?jdk1.5肯定要兼容jdk1.4的语法,会按jdk1.4的语法进行处理,即把数组打散成若干个单独的参数。所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new String[]{“xxx”}),javac只把它当作jdk1.4的语法进行理解,而不把它当作jdk1.5的语法解释,因此会出现参数类型不对的问题
作者: 风华正茂    时间: 2015-8-20 12:21
感谢楼主分享,楼主辛苦了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2