- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
重庆达渝仁科技官网:
Java 泛型解析 (03) :虚拟机执行泛型代码
Java 虚拟机是不存在泛型类型对象的,所有的对象都属于普通类,甚至在泛型实现的早起版本中, 可以将使用泛型的程序编译为在 1.0 虚拟机上能够运行的 class 文件,这个向后兼容性后期被抛弃了,所以后来如果用 Sun 公司的编译器编译的泛型代码, 是不能运行在 Java5.0 之前的虚拟机的, 这样就导致了一些实际生产的问题,如一些遗留代码如何跟新的系统进行衔接, 要弄明白这个问题,需要先了解一下虚拟机是怎么执行泛型代码的。
虚拟机的一种机制: 擦除类型参数,并将其替换成特定类
型,没有指定特定类型用 Object 代替,如前文中的 CoupleT类,
虚拟机擦除后:
[code01]
[java] view plaincopyprint?
public class Couple {
private Object wife ;
private Object husband ;
public Couple(Object wife, Object husband) {
6. this.wife = wife;
7. this.husband = husband;
}
public void setWife(Object wife) {this. wife = wife;}
public void setHusband(Object husband) {this. husband = husband;}
12. public Object getWife() {return wife;}
重庆达渝仁科技官网:
public Object getHusband() {return husband;}
}
类型参数 T 是一个任意类型的, 所以擦除后用 Object 代替了。
不管是 CoupleEmployee或者 CoupleString 擦除后都成为了原
始类 Couple 类,这就好比回到了泛型引入 Java 之前的普通类。 所
以这里重点围绕着 擦除类型参数 这个机制展开讲解。
如有对类型参数有类型限定会怎么替换呢?擦除类型参数机
制告诉我们, 使用限定的类型代替, 如果有多个, 使用第一个代替,
看一段代码:
[code02]
[java] view plaincopyprint?
public class PeriodT extends ComparableT Serializable {
private T begin;
private T end;
4.
public Period(T one, T two) {
6.
if (pareTo(two)
0) {begin = two;end = one;
7.
} else {begin = one;end = two;}
}
}
code02 擦除后, Period 的原始类型如下:
[code03]
[java] view plain copyprint?
public class Period {
private Comparable begin;
private Comparable end;
重庆达渝仁科技官网:
4.
public Period(Comparable one, Comparable two) {
6.
if (pareTo(two)
0) {begin = two; end = one;
7.
} else {begin = one; end = two;}
8.
}
9.
}
思 考 一 下 , 如 果 将 PeriodT extends ComparableT
Serializable
写
成
PeriodT
extends
Serializable
ComparableT 会是怎么样
呢?同理,擦除后原始类型用第一个
Serializable
代替,这样进行
compareTo方法调用的时候,编译器会进行必要的强制类型转换,所
以为了提高效率,将标签接口 ( 没有任何方法的接口,也叫 tagging
接口 ) 放在后面。
先来看看虚拟机执行表达式的时候发生了什么,如:
[code04]
[java] view plain copyprint?
CoupleEmployee couple = ...;
Employee wife = couple.getWife();
擦除后, getWife() 返回的是 Object 类型,然后虚拟机会插
入强制类型转换,将 Object 转换为 Employee,所以虚拟机实际上
执行了两天指令:
调用 Couple.getWife() 方法。
将 Object
您可能关注的文档
- 2017-2022年中国森林旅游行业发展潜力分析及投资战略规划分析报告目录.docx
- 2017-2022年中国虚拟卡口行业市场营运格局分析与发展前景规划研究报告目录.docx
- 2017年HTMi国际酒店旅游管理学院本科课程.docx
- 2017年HTMi国际酒店旅游管理学院学术介绍.docx
- 2017年HTMi国际酒店旅游管理学院研究生课程.docx
- 2017年HTMi国际酒店旅游管理学院语言课程.docx
- 2017年行政管理专业课复习全年规划.docx
- 2017年加拿大卡比兰诺大学旅游专业.docx
- 2017年瑞士酒店管理:HTMi国际酒店旅游管理学院学院文化.docx
- 2017年小学四年级数学上册期末检测卷含答案.docx
最近下载
- 年度赛课外拓展阅读《走近创世神话感受中外异同》教学设计1.docx
- 新版ISO13485-2016医疗器械质量管理体系全套GMP手册程序记录文件.docx
- 心理咨询师(中科院心理研究所)10套题汇总题库-下(多选题汇总).docx
- 北京市轨道交通房山线岩土工程勘察报告.doc
- 微积分(二)(浙江大学)中国大学MOOC 慕课 2021章节测验期末考试答案.docx
- 2023年电子科技大学成都学院计算机科学与技术专业《计算机网络》科目期末试卷A(有答案).docx VIP
- 第一部分LDTH系列电磁流量计.PDF
- 李前程编《建筑力学》(第2版)第六章.ppt VIP
- 心理咨询师(中科院心理研究所)10套题汇总题库-上(单选题汇总).docx
- Defensics健壮性测试工具测试方案.docx
文档评论(0)