IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Eclipse Xtend对Java说:我帮你瘦身

外刊IT评论 2011-12-18 22:20:49 累计浏览 3,570 次
本机暂存

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

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

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

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

Xtend-logo

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

xtend-and-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的感觉如何?

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. SmartSprites - 命令行形式的CSS Sprites生成器 (累计阅读 123,894)
  2. Java开发岗位面试题归类汇总 (累计阅读 22,155)
  3. android 开发入门 (累计阅读 19,527)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,146)
  5. HashMap解决hash冲突的方法 (累计阅读 12,652)
  6. 一个大二学生有关如何成为一名软件工程师的疑问及答复 (累计阅读 9,178)
  7. Java程序员应该知道的10个eclipse调试技巧 (累计阅读 8,012)
  8. 如何让员工忠于公司? (累计阅读 7,939)
  9. Java技术路线 (累计阅读 7,725)
  10. 聊聊ThoughtWorks面试 (累计阅读 7,614)