黑马程序员技术交流社区
标题:
关于反射
[打印本页]
作者:
mengxiang1993
时间:
2015-2-10 20:25
标题:
关于反射
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类型也行,到底是为什么呢?
作者:
mengxiang1993
时间:
2015-2-10 21:27
我想了个原因,拆开数组的每一个元素是Object元素,编译器才拆包,如果是int[] ,编译器不会拆包,只会讲整个数组看成一个object
作者:
wf111sxwf
时间:
2015-2-10 22:45
二楼正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2