Java程序员在使用Ruby编程时会有一种解放的感觉,一种从Java那繁琐的语法环境进入一个无拘无束、自由国度的感觉。随着Clojure和Scala等新语言的出现,这种对比的感觉会越来越强烈。Ruby在很短的时间里异军突起,很大的原因在于它的简洁和自由,比如下面一句代码:

File.new("testfile").each {|line| puts line[-1] }

如果用Java来写,不知道要写多少行。Bruce Tate在《七周七种语言》这本书中谴责Java说:“我的手指在流血,因为我不得不打出这样多的代码;我的眼睛在流血,因为我还要去读它们。”呵呵,说的很形象。

其实,Java并不是诚心在为难程序员,它一直在改进。而Eclipse基金会推出的一种叫做Xtend语言正是为了要简化Java的语法,减轻Java程序员的负担。

又一种新语言?不要担心。Xtend更像是一种模板语言。它紧密的和Eclipse IDE捆绑在一起,要使用它,你需要安装Eclipse的Xtend插件,Xtend代码并不是直接编译成JVM字节码的,当你在IDE编辑、保存Xtend代码时,它会自动的编译成相对应的Java代码。

在上图的右边窗口里,你可以检查生成的Java代码是不是符合你的预期,并可以通过它调试你的程序。

那Xtend究竟能帮助Java程序员做什么呢?面面俱到的介绍一种新语言是一种很复杂的事,我也不想考验各位的耐心。这里只举例说明几个大家一眼就能看出这种语言存在的价值的例子。

1.类型推测

在Java里很多的表达式中,根据语句的右边的代码完全可以推导出左边的类型,比如下面的Java语句:

//Java

List names = getTheListOfNames()

而在Xtend语言里,你就不必再声明左边的类型,直接写成:

val names = getTheListOfNames()

在for循环里可以写成这样:

for (name : getTheListOfNames())

2.对象属性访问方式的简化

在Java里,对象属性的访问一般都是借用set和get方法实现的,在Xtend里,你可以直接这样写:

person.name

而不需要写成:

person.getName()

赋值方法也是:

person.name = "Foo"

等同于

person.setName("Foo")

还有一个特征很像Ruby里的用法,对于一个方法的调用,你可以写成这样:

obj.compute

而不需要写成:

obj.compute()

3. Switch 语句

这条我不说,估计大家也都会明白。Java里的switch语句只能接受数字或char类型的判断参数,而在Xtend里,没有这种限制:

val Shape shape = ...

switch (shape) {

Rectangle case shape.width == shape.height :

"Square ("+shape.width+")"

Rectangle :

"Rectangle ("+shape.width+" x "+shape.height+")"

Circle :

"Circle ("+shape.diameter+")"

default :

"Don't know"

}

4.模板表达式

在Xtend里,定义一个字符串,你可以写成这样:

val msg = 'This is some multi line

text with "double quotes" in it'

请注意,这个字符串可以是多行的。

而在使用这个变量时, 你可以写成:

def print_line(String msg)'''

<>

'''

变量直接嵌入文本里!很像PHP或Ruby里的写法。

5.闭包

我最后介绍的当然也是最强大的一个功能了,闭包。据说Java会在xxxx(xxxx <=3000)年之前加入闭包功能,不过你不用等了。我们来看看Xtend里如何实现闭包:

val predicate = [ Person person | "Hans" == person.name ]

persons.filter(predicate)

这个闭包是用来实现过滤persons集合里person.name=”Hans”的功能的。怎么样,有点函数式编程语言的感觉吧。

Xtend里还有很多的语言特征,这里就不一一叙述了,有兴趣的朋友可以阅读官方网站提供的HTML在线文档,或下载PDF版的文档。

通过上面的介绍,你的Xtend的感觉如何?

附:下面是Xtend官网上提供的一个介绍视频:

分享这篇文章:

分享

看样子你已经点过这个了!

抱歉,你最多只能点三个!

怎么给java代码瘦身_Eclipse Xtend对Java说:我帮你瘦身相关推荐

  1. Java自己文章只能自己修改_文章目录Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见。目的发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽...

    文章目录 Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见. 目的发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽早的发现BUG. 统一代码风格:统一 ...

  2. eclipse中java都乱码怎么办_eclipse中的java代码出现乱码怎么办

    eclipse中的java代码出现乱码怎么办 发布时间:2020-06-29 18:11:20 来源:亿速云 阅读:109 作者:Leah eclipse中的java代码出现乱码怎么办?相信很多没有经 ...

  3. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

  4. java代码的执行机制_关于java代码的执行机制

    转载于:https://blog.csdn.net/houfeng777123/article/details/74316748 1.Java代码执行流程 ·第一步:*.java-->*.cla ...

  5. java 代码 内存泄露_如何用Java编写一段代码引发内存泄露

    Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有,好囧. A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中) ...

  6. java代码块执行顺序_Java笔记 | Java代码块执行顺序测试

    最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下. 如有错漏,希望路过的大佬指出来,以便我进行更改. 先上代码吧! public class ClassA { ...

  7. java代码防止sql注入_动态Java代码注入

    java代码防止sql注入 在本文中,我们将研究如何将Java代码动态加载到正在运行的jvm中. 该代码可能是全新的,或者我们可能想更改程序中某些现有代码的功能. (在开始之前,您可能想知道为什么到底 ...

  8. java 代码块的作用_4种Java代码块的作用讲解

    4种Java代码块的作用讲解 时间:2017-06-28     来源:华清远见JAVA学院 今天华清Java学院小编要和大家分享的是Java代码块的作用,代码块是一种常见的代码形式,他用大括号&qu ...

  9. 灰色模型 java代码_灰色模型的简单Java实现

    前几天在以前的遗留代码中发现一个问题,就是我生成的一个数据的走势曲线的预测值(用于灰色时间序列预测)总是和老代码里的不一致,具体来说就是:遗留代码里面的预测值的斜率总是为零,相比之下我生成的就比较合理 ...

最新文章

  1. 链家前DBA判刑7年!你还敢不敢删库?
  2. Petya and Exam
  3. substr判断最后一个是不是逗号_用java帮助你判断一个数是不是回文数
  4. Spring Boot 静态资源映射与上传文件路由配置
  5. 判断手机浏览器还是桌面浏览器
  6. java setrotation_如何使用Java库将文档转换为横向模式?
  7. python工具书推荐_希望更加深入了解python 有什么书可以推荐?
  8. [BZOJ4540][HNOI2016]序列(莫队)
  9. 2021-06-26图层的概念
  10. N皇后问题(回溯算法解法)
  11. QT5入门学习(一)
  12. ansys--workbench(导入solidworks)受力分析
  13. TCP/IP报文详解
  14. 前端(html[5],css[3])学习总结+参考手册下载
  15. 计算机配置单性价比高,i5电脑主机配置单,性价比高
  16. 【java毕业设计】基于javaEE+SSM+MySql的个人博客系统设计与实现(毕业论文+程序源码)——个人博客系统
  17. 润物细无声之千分之一
  18. 高德地图开发手册 php,地图控件-参考手册-地图 JS API | 高德地图API
  19. 信修修:安全省心!U盘安装纯净原版Win10系统教程!
  20. 黑马最新JavaWeb课程资料目录

热门文章

  1. 台式计算机机箱的作用,如何选购台式电脑机箱?小白装机选购电脑机箱知识指南...
  2. js 兼容事件添加addEvent()
  3. C语言循环结构中break,C语言-循环结构及break、continue
  4. 车库咖啡参与投资拍摄的电影《当我们海阔天空》即将上映
  5. Python爬虫 - 爬取肯德基门店信息
  6. Android File System安卓文件系统(安卓存储分区,/data /storage /sdcard)
  7. IBM推出用于量子计算的CLOPS性能标准;量子基本定理突破绝对零度的适用温度 | 全球量子科技与工业快讯第四十三期
  8. 基于PHP+MySQL的家居装修主题网站
  9. 美美征婚 阿米托佛(*^__^*)
  10. 吾爱2023新年红包题第六题 (CTF)