好吧,标题言过其实了,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的类型

var strList =new ArrayList<String>

//自动推断出item的类型

for (item : strList) {

}

扩展方法

importstaticextension java.util.Collections.*

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

new MyClass().singletonList();

属性读写

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

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

}

Lambda表达式

val textField = new JTextField

//用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";

val salutation = person.firstName ?:'Sir / Madam'

增强的switch

switch myString {

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

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

default : "It’s another short string."

}

switch x {

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

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

  1. java语言中if语句的基本语法_java中if语句有哪些形式和用法

    形式一:if语句 if语句是指如果满足某种条件,就进行某种处理.例如,小明妈妈跟小明说"如果你考试得了100分,星期日就带你去游乐场玩".这句话可以通过下面的一段伪代码来描述. 如 ...

  2. 狂神Java面试题总结:基础及语法169道

    狂神Java面试题总结:基础及语法169道 收集整理:秦疆 联系方式QQ:24736743 微信:qinlvejiang 答案来源收集与互联网,部分内容经供参考,代码全部为手写验证通过. 1~20 1 ...

  3. Java开发环境的搭建与基础语法(温习知识点)

    复习昨日内容 * Java语言概述* Java语言概述&发展史[了解]* Java的跨平台[了解]* JDK JRE JVM 有什么作用[理解] * Java开发环境的搭建 * JDK的下载与 ...

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

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

  5. java xtend_Java加上Xtend,满足你对C#语法的所有想象

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

  6. java xtend_Eclipse Xtend对Java说:我帮你瘦身

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

  7. 相对于java,C++中的那些神奇语法

    空指针还可以调用成员函数 #include <cstdio>class Person {public:void sayHello() {printf("hello!\n" ...

  8. java中if结构用图表示_Java语法基础之选择结构的if语句、switch语句详解

    [前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...

  9. Java高阶代码_Java高阶语法---Volatile

    背景:听说Volatile Java高阶语法亦是挺进BAT的必经之路. Volatile: volatile同步机制又涉及Java内存模型中的可见性.原子性和有序性,恶补基础一波. 可见性: 可见性简 ...

最新文章

  1. Linux编写一个C程序HelloWorld
  2. python3各个版本是通用的吗-python3各版本
  3. foreach遍历----for(object o: list)
  4. Lync-技巧-2.启用-用户-启用-语音-设置-线路URI
  5. 古风登陆html,再祭古风扬 文/凌霄一羽
  6. hbuild json红叉_MUI+Hbuilder之踩坑(三)
  7. 数字社交圈里的白酒“新”消费——腾讯2021白酒行业数字营销洞察白皮书
  8. 并注册烧写钩子 获取启动介质类型_鸿蒙OS开源代码精要解读之—— 系统服务框架子系统(服务启动)...
  9. UPC 2019年第二阶段我要变强个人训练赛第六场
  10. Eclipse创建Maven工程
  11. [Java基础]StringUtils.join()方法与String.join()方法的使用
  12. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和
  13. 1097: 蛇行矩阵
  14. 塑料废物管理行业调研报告 - 市场现状分析与发展前景预测
  15. a73*2+a53*2指的是什么_考验你脑细胞的时候到了!杨花落尽子规啼,闻道龙标过五溪中的子规指的是什么?|考验|脑细胞-360GAME...
  16. Ubuntu18.04 操作分屏显示快捷键
  17. Java使用465端口发送邮件(绕过25端口限制)
  18. 达梦DMFLDR使用介绍
  19. 讲台英语怎么读计算机,一种计算机教学讲台的制作方法
  20. android 神气插件 自动补全tabnine

热门文章

  1. 使用python爬取抖音app视频(appium可以操控手机)
  2. 河北软件职业技术学院计算机专业在哪个校区,河北软件职业技术学院有几个校区,哪个校区最好及各校区介绍...
  3. 如何在AD19的PCB库编辑界面修改尺寸单位
  4. CentOS-5.6-x86_64 配置SSH无密码登陆
  5. 电子商务计算机考研学校排名,电子商务考研院校排名
  6. python咋变汉语_Python3实现汉语转换为汉语拼音
  7. JavaScript 实现页面内时间实时倒计时 计时器内附完整文件欢迎调用(可用于抢购倒计时,记录恋爱纪念日总时长等)输出对应的天数小时分钟秒数
  8. unity图像压缩算法原理
  9. Git与GitHub基础全套完整版教程(持续更新....)
  10. html项目经验范文,优秀的项目经验怎么写?