网站大量收购闲置独家精品文档,联系QQ:2885784924

Java 语法糖.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档