启动java程序的main方法的参数是一个字符串数组,即
public static void main(String[] args)
通过反射的方式来调用这个main方法时,如何为invoke方法传递参数呢?
jdk1.4以后,是把整个数组作为一个参数,按照jdk1.4的语法,是数组中的每个元素对应
一个参数,当把一个字符串数组作为参数传递给invoke方法时,javac 会按照哪种语法进行处理呢?
jdk1.5必须兼容jdk1.4。因此字符串数组会被拆分为若干个单独的参数。
因此在给main方法传递参数时,不能使用代码
mainMethod.invoke(null, new String[]{"123", "456"});
javac 会按照jdk1.4的语法进行编译,会出现参数数量不匹配的问题
java.lang.IllegalArgumentException: wrong number of arguments
解决方案:
1.对我们要传的字符串数组进行一次包装,把它包装到一个Object数组中,这时拆开后,得到唯一参数就是字符串数组
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
mainMethod.invoke(null, new Object[]{new String[]{"123", "456"}});
2.明确告诉编译器,这个数组是一个参数
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
mainMethod.invoke(null, (Object)new String[]{"123", "456"});