当前位置:首页 > 开发 > 编程语言 > Java > 正文

java泛型的一个陷阱-只在编译时检查

发表于: 2014-02-28   作者:cuityang   来源:转载   浏览次数:
摘要: 证明:java泛型检查只在编译期有效,而反射是在运行期的调用机制 1 用反射进行put,绕过了泛型检查; 2 get时泛型会自动进行类型转换,从而导致了ClassCastException。 Map<String, String> map = new HashMap<String, String>();     &nb
证明:java泛型检查只在编译期有效,而反射是在运行期的调用机制

1 用反射进行put,绕过了泛型检查;
2 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 
    } 

java泛型的一个陷阱-只在编译时检查

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
泛型(Generic Type)是JDK1.5引入的影响最深远、对语言本身变革最大的Java新特性。 从Java 1.0版本
1 package com.xt.test; 2 3 /** 4 * 泛型实现堆栈,thinking in java中的例子 5 * 6 * @author Admi
1 package com.xt.thinks15_7; 2 3 import java.util.Arrays; 4 5 class EraseObject1<A> { 6
一、引例。 1.引例。 假设现在有一个ArrayList的容器,如果不使用泛型约束,则可以向容器中加入各种
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型(generic)这个是jdk 1.5的新特性 那么泛型有什么特点呢? When you take an element out of a C
Java泛型由来的动机 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(c
源:http://www.blogjava.net/fancydeepin/archive/2012/08/25/java_Generics.html 评: 泛型的好处
JDK1.5中最显著变化之一就是添加对泛型类型的支持。所谓的泛型就是指在对象建立时不指定类中属性的
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号