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的语法解释,因此会出现参数类型不对的问题 |
|