这个是JDK1.4版本遗留的兼容性问题,高新视频中都有,这里再赘述一下吧
jdk1.4 和jdk1.5 的invoke方法的区别:
1.5: public Object invoke(Object obj, Object...args)
1.4: public Object invoke(Object obj, Object[] args)
//按照1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中每个元素分别对应被调用方法中的一个参数
//所以调用charAt方法可以用1.4的写法改为 methodCharAt.invoke("str", new Object[]{1}) 的形式
按照1.5的语法,整个数组是一个参数,而在1.4中数组的每个元素对应一个参数(会自动拆包)
1.5 为了兼容1.4,保留了该设定,所以在给main方法传递参数时,不能使用Method.invoke(null, String[]{...})
因为编译器会将其按照1.4的语法进行编译,所以会出现"参数个数异常",这是1.4版本遗留的兼容性问题
处理方法:
Method.invoke(null, new Object[]{new String[]{"..."}});//1,相当于加一层皮,拆分一次
Method.invoke(null, (Object)new String[]{"..."});//2,相当于声明为一个对象,不让编译器拆分 |