java泛型解析(03):虚拟机执行泛型代码

java泛型解析(03):虚拟机执行泛型代码

ID:34080342

大小:90.51 KB

页数:7页

时间:2019-03-03

java泛型解析(03):虚拟机执行泛型代码_第1页
java泛型解析(03):虚拟机执行泛型代码_第2页
java泛型解析(03):虚拟机执行泛型代码_第3页
java泛型解析(03):虚拟机执行泛型代码_第4页
java泛型解析(03):虚拟机执行泛型代码_第5页
资源描述:

《java泛型解析(03):虚拟机执行泛型代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java泛型解析(03):虚拟机执行泛型代码Java虚拟机是不存在泛型类型对象的,所有的对象都属于普通类,甚至在泛型实现的早起版本屮,可以将使用泛型的程序编译为在1.0虚拟机上能够运行的class文件,这个向后兼容性后期被抛弃了,所以后来如果用Sun公司的编译器编译的泛型代码,是不能运行在Java5.0之前的虚拟机的,这样就导致了一些实际生产的问题,如一些遗留代码如何跟新的系统进行衔接,要弄明白这个问题,需要先了解一下虚拟机是怎么执行泛型代码的。虚拟机的--种机制:擦除类型参数,并将其替换成特定类型,没有指定特定类型用Object代替,如前文中的Couple类,虚拟机擦除后:[c

2、odeOlJ[java]viewplaincopyprint?1・publicclassCouple{2.privateObjectwife;3.privateObjecthusband;4.5.publicCouple(Objectwife,Objecthusband){&this.wife=wife;7.this・husband二husband;8.}9.publicvoidsetWife(Objectwife){this・wife=wife;)10.publicvoidsetHusband(Objecthusband){this・husband二husband.j11.12.pu

3、blicObjectgetWifeO{returnwife;}14.}类型参数T是一个任意类型的,所以擦除后用Object代替了。不管是Couple或者Couple擦除后都成为了原始类Couple类,这就好比回到了泛型引入Java之前的普通类。所以这里重点围绕着摻隙类蜚參数这个机制展开讲解。如有对类型参数有类型限定会怎么替换呢?擦除类型参数机制告诉我们,使用限定的类型代替,如果有多个,使用第一个代替,看一段代码:[code02][java]viewplaincopypjrint?code02Period的原始类型如下:1.publicclassPer

4、iod&Serializable>{2.privateTbegin;3.privateTend;4.5.publicPeriod(Tone,Ttwo){6.if(one.compareTo(two)>0){begin二two;endone;7.)else{begin二one;end二two:)8.}9.}[code03.][java]viewplaincopyprint?1・publicclassPeriod{2.privateComparablebegin;3.privateComparableend;4.5.publicPeriod(Co

5、mparableone,Comparabletwo){&if(one.compareTo(two)>0){begin二two;end=one;7.}else{begin=one;end=two;}&}9.}思考一下,如果将Period&Serializable>写成Period>会是怎么样呢?同理,擦除后原始类型用第一个Serializable代替,这样进行compareTo方法调用的时候,编译器会进行必要的强制类型转换,所以为了提高效率,将标签接口(没有任何方法的接口,

6、也叫tagging接口)放在后而。先来看看虚拟机执行表达式的时候发生了什么,如:[code04][java]viewplaincopypi^int?<1・Couplecouple=・・・;2・Employeewife=couple・gelWife();擦除后,getWife()返回的是Object类型,然后虚拟机会插入强制类型转换,将Object转换为Employee,所以虚拟机实际上执行了两天指令:1.调用Couple.getWife0方法。2.将Object转换成Employee类型。再来看看虚拟机执行泛型方法的时候发生了什么,泛型方法如:[code05][ja

7、va]viewplaincopyprint?1.publicstatic

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。