黑马程序员技术交流社区

标题: 有个问题困扰我很久了。。关于反射。。关于invoke [打印本页]

作者: Jacky_Chen1990    时间: 2013-5-18 18:53
标题: 有个问题困扰我很久了。。关于反射。。关于invoke
本帖最后由 Jacky_Chen1990 于 2013-5-18 19:33 编辑

先看一下代码吧:
  1.   ArrayList<Integer> al = new ArrayList<Integer>();
  2.                
  3.                 al.getClass().getMethod("add", Object.class).invoke(al, "abc");
  4.                 System.out.println(al);
复制代码
在这个集合中定义的是只能加入Integer类型的对象,但是通过反射之后调用方法却能够加入字符串,这是为什么呢。。。。



作者: 袁梦希    时间: 2013-5-18 19:24
楼主你好:
在JDK1.5之后呢,出现了一种安全机制,叫做泛型机制,
这种泛型机制的好处就是:当类中的操作的引用数据类型不确定的时候,以前用的Object来进行扩展的,现在可以用泛型来表示。
这样可以避免强转的麻烦,而且将运行问题转移到的编译时期,

泛型技术其实应用在编译时期,是给编译器使用的技术,到了运行时期,泛型就不存在了。
为什么? 因为泛型的擦除:也就是说,编辑器检查了泛型的类型正确后,在生成的类文件中是没有泛型的。

所以可以利用反射在运行时期对集合进行增加其他类型的元素,因为反射是在运行时期才能体现,因为是字节码文件。

云青年为您手动解答!

作者: Jacky_Chen1990    时间: 2013-5-18 19:31
袁梦希 发表于 2013-5-18 19:24
楼主你好:
在JDK1.5之后呢,出现了一种安全机制,叫做泛型机制,
这种泛型机制的好处就是:当类中的操作的 ...

袁老大好!你这个回答很牛逼!谢谢你!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2