什么是泛型擦除 什么是泛型擦除啊,能说明一下吗!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Java泛型的悲哀啊,Java的泛型是使用擦除来实现的,擦除让很多东西都没有意义,或者说,在泛型代码内部,无法获得任何泛型参数类型的信息。举个例子ArrayList<String>和ArrayList<Integer>在程序运行的时候都是相同的类型,这两种类型都被擦除成了他们的原生类型ArrayList JVM在实现泛型的时候是使用擦除功能来实现的,也就是JVM本身是不支持泛型的,比如:List<Integer> integer = new ArrayList<Integer>();这样的一段代码,针对调用者而言语法结构发生了改变,但是实际上针对JVM而言,它会去解析泛型语法,让后使它变成了原始版本:List integer = new ArrayList();这种情况就称为泛型的“擦除”,因为JVM本身不支持泛型,所以在实现的时候如同楼上的说的,这确实是Java泛型的悲哀,它没有真正使用泛型的标准原理实现JVM对泛型的编译,只是玩了个小小的花招主要原因是JVM在推出泛型的时候实际上并没有对JDK的编译器进行改写,所以使用了擦除功能,也就是说,针对JVM本身而言:上边两段代码都是一模一样的,没有区别,因为使用的“擦除”功能,在“擦除”过程里面,它会针对Java泛型的新语法进行类型检测操作,JVM本身不支持泛型,在编译器进行泛型代码的编译的时候,其实是使用了“擦除”功能,就是JVM在编译带泛型的代码的时候,实际上对带泛型的代码进行了类型检查,然后“擦除”泛型代码中的类型支持,转换为普通类型进行编译。这里有一个新概念成为“外露”类型——单独出现而不是位于某个类型中的类型参数如(List<T>中的T)针对T类型而言,T的上界就是Object。这一项技术的功能极其强大,我们可以使几乎所有泛型类型的精度增强,但是与JVM兼容。这是一个“擦除”的快照,具体原理你可以参考前段时间我整理的Blog:http://blog.csdn.net/silentbalanceyh/archive/2009/09/24/4586627.aspx java调用DLL,需要怎么走? 一道java面试题 JPanel为什么添加keyPressed事件无用? 一个运行java的问题 请问Java支持什么声音文件格式? constructro 请各位兄弟帮帮忙,谢谢!!!!!!!!!!!!!!!!! 初学java,请各位给我推荐比较好的java书 请问现在都用什么东东来写JAVA程序,VJ++或JDK?还是其它的什么东东?有什么特点? 韩顺平视频里的小程序 GUI 复赛题目 java虚拟机移植问题
举个例子
ArrayList<String>和ArrayList<Integer>在程序运行的时候都是相同的类型,这两种类型都被擦除成了他们的原生类型ArrayList
List<Integer> integer = new ArrayList<Integer>();
这样的一段代码,针对调用者而言语法结构发生了改变,但是实际上针对JVM而言,它会去解析泛型语法,让后使它变成了原始版本:
List integer = new ArrayList();
这种情况就称为泛型的“擦除”,因为JVM本身不支持泛型,所以在实现的时候如同楼上的说的,这确实是Java泛型的悲哀,它没有真正使用泛型的标准原理实现JVM对泛型的编译,只是玩了个小小的花招
主要原因是JVM在推出泛型的时候实际上并没有对JDK的编译器进行改写,所以使用了擦除功能,也就是说,针对JVM本身而言:
上边两段代码都是一模一样的,没有区别,因为使用的“擦除”功能,在“擦除”过程里面,它会针对Java泛型的新语法进行类型检测操作,JVM本身不支持泛型,在编译器进行泛型代码的编译的时候,其实是使用了“擦除”功能,就是JVM在编译带泛型的代码的时候,实际上对带泛型的代码进行了类型检查,然后“擦除”泛型代码中的类型支持,转换为普通类型进行编译。这里有一个新概念成为“外露”类型——单独出现而不是位于某个类型中的类型参数如(List<T>中的T)针对T类型而言,T的上界就是Object。这一项技术的功能极其强大,我们可以使几乎所有泛型类型的精度增强,但是与JVM兼容。
这是一个“擦除”的快照,具体原理你可以参考前段时间我整理的Blog:
http://blog.csdn.net/silentbalanceyh/archive/2009/09/24/4586627.aspx