java泛型检查只在编译期有效,而反射是在运行期的调用机制。
来源:互联网 发布:诚邀辣妹 网络性与爱 编辑:程序博客网 时间:2024/05/16 23:55
java泛型检查只在编译期有效,而反射是在运行期的调用机制。
用反射进行put,绕过了泛型检查;get时泛型会自动进行类型转换,从而导致了ClassCastException。
黑马论坛里这道题也是的。
比如下面这个例子:
Map<String, String> map = new HashMap<String, String>(); String key = "key"; Integer val = new Integer(1); Method m = HashMap.class.getDeclaredMethod("put", new Class[] { Object.class, Object.class }); m.invoke(map, key, val); System.out.println(map); //{key=1} System.out.println(map.get(key)); // java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String }
用反射进行put,绕过了泛型检查;get时泛型会自动进行类型转换,从而导致了ClassCastException。
另一个例子:
/** * 3、 ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。*/import java.util.*;import java.lang.reflect.*;import java.lang.*;class ListTest3{public static void main(String[] args) throws Exception{ArrayList<Integer> al = new ArrayList<Integer>();//al.add("hahah");Class clazz = ArrayList.class; //获取字节码对象.Method me = clazz.getMethod("add", Object.class); //反射方法.me.invoke(al,"我是字符串"); //运行方法.System.out.println(al);}}
黑马论坛里这道题也是的。
0 0
- java泛型检查只在编译期有效,而反射是在运行期的调用机制。
- java泛型检查只在编译期有效,而反射是在运行期的调用机制。
- 在运行期通过反射了解JVM内部机制
- 在运行期通过反射了解JVM内部机制
- 在运行期通过反射了解JVM内部机制
- Java函数调用过程-编译期-运行期
- C++中多态如何在编译期和运行期实现
- C++多态在编译和运行期的差别
- 缺省参数是在编译期决定的
- 利用Java反射机制实现程序运行期函数定位
- 程序在 编译期,链接期, 运行期各执行哪些操作?
- 程序在 编译期,链接期, 运行期各执行哪些操作?
- Java编译期和运行期 & JVM
- java编译期和运行期优化
- 数组初始化是在编译器还是在运行期?
- 编译期与运行期
- 编译期与运行期
- C++的多态如何在编译和运行期实现
- wince6.0开机自启动应用程序
- 简单的WCF练习(1)
- HttpClient4.3教程
- Java IO流->处理流->数据流:DataOutputStream&DataInputStream
- Note For Linux By Jes(12)-认识系统服务(daemons)
- java泛型检查只在编译期有效,而反射是在运行期的调用机制。
- Ubuntu下搭建Ruby On Rails
- 终于创建了我的第一篇文章
- hdu 5379 Mahjong tree(构造)
- 九度oj 1152
- 归并排序(含完整源码)
- 华为OJ(笔画)
- 关于单链表中环的问题
- PS学习笔记----图层锁定