A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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类型的对象,但是通过反射之后调用方法却能够加入字符串,这是为什么呢。。。。


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

2 个回复

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

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

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

云青年为您手动解答!

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
袁梦希 发表于 2013-5-18 19:24
楼主你好:
在JDK1.5之后呢,出现了一种安全机制,叫做泛型机制,
这种泛型机制的好处就是:当类中的操作的 ...

袁老大好!你这个回答很牛逼!谢谢你!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马