- public class InvokeMain {
- public static void main(String[] args) throws Exception {
- // 传递的类名
- String className = args[0];
- // getMethod("方法名字","形参类型");
- Method m = Class.forName(className).getMethod("main", String[].class);
- // invoke(参数1:调用该方法的对象,静态方法不是对象的,所以为null,参数2:要传递的值)
- m.invoke(null, (Object) new String[] { "abc", "wo" });
- Method m1 = Class.forName("com.reflect.ReflectMain").getMethod("f",
- int[].class);
- m1.invoke(null, new int[] { 1, 2, 3 });
- }
- }
- class ReflectMain {
- public static void main(String[] args) {
- for (String s : args) {
- System.out.print(s);
- }
- }
- public static void f(int[] a) {
- for (int b : a) {
- System.out.print(b);
- }
- }
- }
复制代码 张老师说,按照JDK1.5的语法,整个数组是一个参数,而按照JDK1.4的语法,数组中每一个元素对应一个参数。JDK1.5肯定要兼容JDK1.4,
所以javac只把它当作JDK1.4语法进行理解,因此会出现参数类型不对。
所以两种方法: 1 强转为Object 类型 即 (Object) new String[] { "abc", "wo" });
2.创建object【】,数组里存放一个字符串数组 即 new Object[]{new String[]{"abc","ww"}}
下来,我用int[]数组做了个实验,发现不用转换成object类型也行,到底是为什么呢?
|
|