- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java 语法糖
Java 语法糖
Java 语法糖
语法糖 (Syntactic Sugar ),也称糖⾐语法,是由英国计算机学家 Peter .J .Landin 发明
的⼀个术语,指在计算机语⾔中添加的某 语法,这 语法对语⾔的功能并没有影
响,但是更⽅便程序员使⽤。Java 中最常⽤的语法糖主要有泛型、变长参数、条件编
译、⾃动拆装箱、内部类等。虚拟机并不⽀持这些语法,它们在编译阶段就被还原回
了简单的基础语法结构,这个过程成为解语法糖。
泛型是 JDK 1.5 之后引⼊的⼀项新特性,Java 语⾔在还没有出现泛型时,只能通过
Object 是所有类型的⽗类和类型强制转换这两个特点的配合来实现泛型的功能,这样
实现的泛型功能要在程序运⾏期才能知道 Object 真正的对象类型,在 j avac 编译期,
编译器⽆法检查这个 Object 的强制转型是否成功,这便将⼀些风险转接到了程序运⾏
期中。
Java 语⾔在 JDK 1.5 之后引⼊的泛型实际上只在程序源码中存在,在编译后的字节码
⽂件中,就已经被替换为了原来的原⽣类型,并且在相应的地⽅插⼊了强制转型代
码,因此对于运⾏期的Java语⾔来说,ArrayList和 ArrayList就是同⼀个类。所以泛型
技术实际上是 Java 语⾔的⼀颗语法糖,Java 语⾔中的泛型实现⽅法称为类型擦除,基
于这 ⽅法实现的泛型被称为伪泛型。
下⾯是⼀段简单的 Java 泛型代码:
MapInteger,String map = new HashMapInteger,String();
map.put(1,No.1);
map.put(2,No.2);
S stem.out.println(map.get(1));
S stem.out.println(map.get(2));
将这段 Java 代码编译成 Class ⽂件,然后再⽤字节码反编译⼯具进⾏反编译后,将会
发现泛型都变回了原⽣类型,如下⾯的代码所⽰:
Map map = new HashMap();
map.put(1,No.1);
map.put(2,No.2);
S stem.out.println((String)map.get(1));
S stem.out.println((String)map.get(2));
为了更详细地说明类型擦除,再看如下代码:
import java.util.List;
public class FanxingTest{
public void method(ListString list){
S stem.out.println(List String);
}
public void method(ListInteger list){
S stem.out.println(List Int);
}
}
当⽤ j avac 编译器编译这段代码时,报出了如下错误:
FanxingTest.java:3: 名称冲突:method(java.util.Listjava.lang.Strin
(java.util.Listjava.lang.Integer) 具有相同疑符
public void method(ListString list){
^
FanxingTest.java:6: 名称冲突:method(java.util.Listjava.lang.Integ
d(java.util.Listjava.lang.String) 具有相同疑符
public void method(ListInteger list){
^
2 错误
是因为泛型 List 和 List 编译后都被擦除了,变成了⼀样的原⽣类型 List ,擦除动作导
致这两个⽅法的特征签名变得⼀模⼀样,在 Class 类⽂件结构⼀⽂中讲过,Class ⽂件
中不能存在特征签名相同的⽅法。
把以上代码修改如下:
import java.util.List;
public class FanxingTest{
public int method(ListString list){
S stem.out.prin
您可能关注的文档
- Verilog中generate的用法.pdf
- 汉语语法学教学大纲.pdf
- 对“音乐语法”的探讨.pdf
- 英汉语法比较与翻译_袁昌明.pdf
- 新概念青少年版Unit7.3A.ppt
- 新编剑桥BEC中级第四单元课件 4-advertising.ppt
- INDIRECT函数的语法及使用实例.pdf
- qui, que, dont, où.ppt
- 第十五章 定义语法.pdf
- SQLite 语法.pdf
- 中国小弯丝盘项目投资可行性研究报告.docx
- 中国喷水枪支架项目投资可行性研究报告.docx
- 2024年运载火箭跟踪、遥测及测控设备项目资金需求报告代可行性研究报告.docx
- 2024年会议电视图像必威体育官网网址机项目资金申请报告代可行性研究报告.docx
- 2024年保健会所投资申请报告代可行性研究报告.docx
- 2024年在线婚恋项目资金申请报告代可行性研究报告.docx
- 2024年光学计量标准器具项目资金筹措计划书代可行性研究报告.docx
- 人教版(2024)八年级下册物理第十章《浮力》第3节 物体的浮沉条件及应用 教案.docx
- 测控技术在电力设备检测中的应用.docx
- 中国牛仔布吊白浆项目投资可行性研究报告.docx
文档评论(0)