Java反射异常:java.lang.IllegalArgumentException: wrong number of arguments

在用反射调用Hello.java的main方法时报了一个异常
java.lang.IllegalArgumentException: wrong number of arguments

Hello.java

package classloader;
public class Hello{
    public static void main(String args[]){
        for(String arg:args){
            System.out.println("运行Hello的参数:"+arg);
        }
    }
}

上网搜索一番后了解了原因
取main方法时用的是:

Method main=getMethod("main",String[].class);

调用时用的是:

main.invoke(null,argsArray);

这时取出的main方法的参数是一个Object对象
在用invoke方法调用main时传的参数argsArray是一个字符串数组对象
参数个数不匹配,因此会报异常wrong number of arguements
正确的调用方法是先将String数组强制转换成Object,然后传参数

main.invoke(null,(Object)argsArray);

这时参数个数就匹配了

你可能感兴趣的:(java-类加载机制与反射,classloader,java,反射)