快速业务通道

在不改变语言的前提下如何推进Java的不断演进 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

另一个探究注解处理器的项目是Lombok,它将该技术又向前推进了一大步。Lombok将注解作为回调以 运行Java agent,后者会根据注解重写各种javac内核。由于操纵的是内部类,因此它不太适合于产品使 用(JVM各个小版本中的内部类也可能不一样),但该项目对于注解处理器到底能做什么这个问题上还是 颇具启发意义的,包括:

通过@Getter和@Setter注解定义各种访问级别的属性,如@Setter(AccessLevel.PROTECTED) private String name;

@EqualsAndHashCode注解会根据对象中的属性实现hashCode()和 equals()方法

@ToString注解会实现toString()方法

@data方法相当于 @ToString、@EqualsAndHashCode、所有属性的@Getter以及所有非final属性的 @Setter的集合,可以使用 @data方法和构造方法初始化final属性

在不改变语言的前提下如何推进Java的不断演进(3)

时间:2011-08-05 infoq 译:张龙

还可以通过这种方式进行其他的语言试验,比如移除Java中的非运行时异常等。

虽然注解处理器技术为语言试验开辟了一条新航线,但还是要注意生成代码的可读性,保证开发者能 读懂生成的代码。Chapman给出了很多建议:

要生成源代码而不是字节码,注意生成代码的格式(尤其是缩进)。编译器不在乎生成的代码是不是 都在同一行,但用户在乎。我甚至还使用注解处理器在恰当的地方增加了一些注释和javadoc。

如果这项技术逐渐流行起来,用户将可以通过IDE查看编译期所生成的代码。

IDE中的语法糖

Bruce Chapman还提到了第三项技术——将语法糖从语言迁移到IDE中——他在博客中对该问题做过深 入阐述。对于Java IDE来说,生成部分样板代码已成为不可或缺的功能了,比如类的getters和setters, 但IDE开发者刚刚开始深挖该这个概念。 JetBrains的IntelliJ 9为内部类提供了一个类似于闭包的简洁 的代码块语法,开 发者也可以自己加。就像代码折叠一样,该语法会扩展到编译器能够处理的完整的匿 名内部类——这样坚持使用标准的匿名内部类语法的开发者很容易就适应了。 Eclipse也有一个类似的插 件。关键在于这种语法仅仅是实际代码的另一种展示方式而已,编译器和任何源代码管理工具都能够像以 前那样处 理他们。开发者可以在两种方式间自由切换(就像代码的展开与收起一样),无权访问该语法 糖定义的人仅仅会看到正常的Java代码。Chapman说到:

要想实现易于使用的目标还有很多工作要做,但从长远来看,我发现开发者会很轻松地实现加糖/脱糖 (sugaring/desugaring)的转换(可以 参考jackpot来 了解实现原理)、不断尝试、不断演进并与同事 和社区分享好的点子。这么做的好处与语言的演进别无二致。最好的东西会流行起来并形成实际语言演进 的基础,如 果必要的话还可以随时去除该方法无法实现的“噪音”。

由于语法糖还要兼顾(非常多)其他的语言特性,因此无法提供完整的闭包支持;比如说BGGA闭包就 有一些特性无法匹配匿名内部类,因此不能通过这种方式实现。话虽如此,这种想 法却展示了通过各种 新语法来表示匿名内部类的可行性,类似于BGGA语法或是FCM语法,开发者也可以选择自己喜欢的语法。 其他的语言特性(如null-safe Elvis operator)可以通过这种方式实现。要想进一步验证该想法,可以 体验一下这个NetBeans module(由Chapman开发),这正是他所说的用于 Properties的原型。

结论

在语言的发展过程中总是需要考虑稳定与发展之间的平衡。上面介绍的技术所带来的好处是他们不会 影响平台或是语言本身。这么做允许我们犯错误,也有益于进行快速激进的试验。由于开发者能够自由地 进行试验,我们看到越来越多的人开始解决常见的样板代码“噪音”问题,如匿名内部类语法等,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号