好吧,标题言过其实了,Xtend只是在某些方面提供了与C#类似的语法。又或者作为资深Java程序猿,你根本就对这个标题感到愤怒或不屑,“我大Java何时要与屌丝C#做比较了”。但无论如何,Xtend在语法上的清爽还是让我这个非资深程序猿感到了惊喜。如果你偶尔也对Java重复的getter/setter感到无聊,对Java5/6/7缺少Lambda表达式感到遗憾,那么,Xtend刚好可以解决你的问题。

Xtend是啥

Xtend是eclipse旗下的开源项目,主页是http://www.eclipse.org/xtend/。简单的说,它是为Java语言添加的Syntax Sugar。只要向你的eclipse添加Xtend插件(如何安装见Xtend主页),然后在Java工程中建立.xtend文件,你就可以写Xtend代码了。编译时,Xtend会首先被预处理为Java代码,在eclipse中你可以实时看到预处理的结果。见下图:

这样你大概清楚了,Xtend与Java一定是100%兼容的。实际情况确实如此,你可以向任意Java工程中加入任意数量的xtend文件,它们可以与所有的Java代码相互调用。这是因为,不管是对于Javac还是JVM,它们都是一种东西。

既然如此,我就会想,如果Xtend能给项目开发带来一点好处的话,那为什么不用呢,毕竟我不会因此损失任何东西。但是,Xtend带来的不是一点好处,而是大大的好处。

Xtend能给我们带来啥

简单来说,Xtend能使我们的项目代码更加干净,就算从耄耋老人变成小清新也不是不可能。下面举例说明一些Xtend的主要特性。

类型推导

//自动推导出strList的类型

varstrList =newArrayList

//自动推断出item的类型

for(item : strList) {

}

扩展方法

importstaticextensionjava.util.Collections.*

//

相当于调用Collections.singletonList(new MyClass())

newMyClass().singletonList();

属性读写

if(p.firstName =="XX"){//相当于调用p.getFirstName()方法

p.firstName = "YY"//相当于调用p.setFirstName("YY")方法

}

Lambda表达式

valtextField =newJTextField

//用lambda表达式注册一个回调函数

textField.addActionListener(

[ ActionEvent e |

textField.text = "Something happened!"

])

//以下代码非常像C#中的Linq

valresult = personList

.filter[firstname.startsWith("J")]//根据firstname属性过滤

.sortBy[age]//根据age属性排序

.take(3)//取前三个

.map[surname +", "+ firstname]//组合出完整的名字

.join("; ")//构造一个以";

"为分隔符的字符串

:.和?:操作符

//以下等价于if(myRef != null) myRef.doStuff()

myRef?.doStuff

//以下等价于

// if(person.firstName != null) salutation = person.firstName;

// else salutation = "Sir / Madam";

valsalutation = person.firstName ?:‘Sir / Madam‘

增强的switch

switchmyString {

casemyString.length >5:"a long string."//根据case中boolean表达式的值判断

case‘some‘:"It’s some string."//调用equals方法判断

default:"It’s another short string."

}

switchx {

String :x.length//如果x是string类型,则调用((String)x).length()

List> :   x.size //如果x是List>类型,则调用((List>)x).size()

default:-1

}

其它

另外还有其他特性,简单列出(不是完整列表)。

1.        内置模板表达式(类似于Velocity/FreeMarker的功能)

2.        Collection/Map的常量表达式

3.        Typeof关键字

4.        as关键字

结语

几年前我第一次用Xtext解析Domain Specific Language(DSL)时,就接触到了Xtend,因为Xtext强烈推荐用Xtend实现DSL的解析。但当时认为为此学习一种奇怪的语法非常不值,因此回避了Xtend部分。今年再次用到Xtext,感觉总要比上次有些长进吧,就细细钻研了下Xtend的语法,最后边看边爽,“哈哈,这正是我想要的”。

在语法的很多方面,C#有比Java更强大的feature。比如C#很早就有Lambda表达式,而Java从Java 8才开始支持。但是Xtend可以在一定程度上弥补Java语法的不足,尤其是对Collection进行大量统计操作的时候,Xtend的Lambda表达式,再加上map/reduce/filter等Extension方法,一定是你需要的武器。

最后,Xtend非常简单,它的Reference Documentation总共不过60多页。那么赶紧去看看吧,网址是http://www.eclipse.org/xtend/documentation.html

原文:http://blog.csdn.net/jiangfuqiang/article/details/26169813

java xtend_Java加上Xtend,满足你对C#语法的所有想象相关推荐

  1. java xtend_Java加上Xtend,满足你对C#语法的所有想象 | 学步园

    好吧,标题言过其实了,Xtend只是在某些方面提供了与C#类似的语法.又或者作为资深Java程序猿,你根本就对这个标题感到愤怒或不屑,"我大Java何时要与屌丝C#做比较了".但无 ...

  2. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  3. java玩转区块链-基础篇-solidity语法-基础类型

    java玩转区块链-基础篇-solidity语法-基础类型 java环境配置 代码准备 maven 完整solidity 执行步骤 基础类型 布尔类型 类型标识: 字面常量值: 运算符: 短路规则: ...

  4. Java加上Xtend,满足你对C#语法的所有想象

    好吧,标题言过其实了,Xtend只是在某些方面提供了与C#类似的语法.又或者作为资深Java程序猿,你根本就对这个标题感到愤怒或不屑,"我大Java何时要与屌丝C#做比较了".但无 ...

  5. Java减肥高手Xtend 捆绑Eclipse IDE

    Java 程序员在使用 Ruby 编程时会有一种解放的感觉,一种从 Java 那繁琐的语法环境进入一个无拘无束.自由国度的感觉.随着 Clojure 和 Scala 等新语言的出现,这种对比的感觉会越 ...

  6. java编译器加上参数_java8 之 Java编译器的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  7. 【Java从入门到头秃专栏 8】语法篇(七) :反射 动态代理 注解

    目录 1 反射机制 2 反射的应用:动态代理 3 注解 1 反射机制 反射机制(Reflect Machanism),是指在程序运行期间借助Reflect API获取任何类的内部信息,并能直接操作对象 ...

  8. java 左右两边数据类型不一样_java基础语法

    常量 什么是常量 值不能改变的量 为什么使用常量 在开发不可避免的要用来一些数,这时候就可以使用常量 常量的分类 1.整型    整数 2.浮点型  小数 3.布尔类型  只有两个值用来表示真与假tr ...

  9. JAVA运算的类型兼容原则_Java基础语法回顾(一)

    Java基础语法 Java规范 image.png Java字节码 java程序是以".java"为扩展名,当我们编写完java程序后,要执行程序需要经过两个阶段:编译和运行. 编 ...

最新文章

  1. angular select设置默认选中_技术分享 | Charset 和 Collat??ion 设置对 MySQL 性能的影响...
  2. 前端实习生笔试_2016春网易前端暑期实习生笔试面经(二面已挂)
  3. python的史蒂芬加速迭代法_如何将Pandas迭代速度加快150倍?
  4. java并发编程学习5--forkJoin
  5. Spring Cloud Alibaba迁移指南(三):极简的 Config 1
  6. 公开SNS社区即时找朋友链的源代码和部署方案(续六)
  7. Python的三种基本数据类型
  8. overleaf 插入visio图像
  9. 外卖点餐系统源码|餐饮点餐源码开发
  10. android 五种存储方式,android数据五种存储
  11. 石川:出色不如走运 (II)?
  12. python统计中英文字符个数-Python统计英文、中文、数字、空格等字符数
  13. geotools中等值面的生成与OL3中的展示
  14. 联想小新pro13关闭自动调节亮度
  15. Vue + Echart 绘制地图区域标记
  16. mysql 黑马,mysql-黑马-day01
  17. 运算放大器基础知识:什么是运算放大器?
  18. Vue3 + Photo-sphere-viewer 全景
  19. 2017腾讯暑期实习-产品经理二面(霸面)
  20. iif函数 vfp_VFP常用函数大全

热门文章

  1. UX最佳实践:提高用户体验影响力的艺术
  2. uni-app个人中心
  3. UBLOX板卡基础设置--F9P板卡配置(基准站和流动站)
  4. java点击按钮隐藏图片6_原生JS实现隐藏显示图片 JS实现点击切换图片效果
  5. word插入图表目录的时候同时插入了原图的解决办法
  6. QQ空间点赞...取消点赞
  7. (STM32笔记5)ws2812驱动开发
  8. 更改系统高亮显示颜色(highlight color)
  9. Golang 微信小程序加密数据解密算法实现
  10. [数学建模] 微分方程--捕鱼业的持续发展