java xtend_Eclipse Xtend对Java说:我帮你瘦身
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的感觉如何?
java xtend_Eclipse Xtend对Java说:我帮你瘦身相关推荐
- 怎么给java代码瘦身_Eclipse Xtend对Java说:我帮你瘦身
Java程序员在使用Ruby编程时会有一种解放的感觉,一种从Java那繁琐的语法环境进入一个无拘无束.自由国度的感觉.随着Clojure和Scala等新语言的出现,这种对比的感觉会越来越强烈.Ruby ...
- Java加上Xtend,满足你对C#语法的所有想象
好吧,标题言过其实了,Xtend只是在某些方面提供了与C#类似的语法.又或者作为资深Java程序猿,你根本就对这个标题感到愤怒或不屑,"我大Java何时要与屌丝C#做比较了".但无 ...
- 什么?超过60%的开发者都开始从Java 8 升级到 Java 11了?
随着Java版本命名规则的改革,我们时不时的见到Java又出新版本的消息,DD这边因为长期从事Java方向的开发,所以也一直关注并与大家分享这方面的咨询. 每次说到Java升级,几乎在留言中都会看到这 ...
- 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池 发布时间:2018-12-22 11:20 在 ...
- 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中 ...
- java web ubuntu_Ubuntu部署Java web项目
登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update 更新软件列表 输入: ...
- java反射最佳实践,java反射性能测试分析
java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
- Java常用命令及Java Dump
线程Dump,包含所有线程的运行状态.纯文本格式. 堆Dump,包含线程Dump,幵包含所有堆对象的状态.二进制格式. Java Dump方法 1.使用Java虚拟机制作Dump 指示虚拟机在发生内存 ...
最新文章
- Linux创建文件自动消失,Linux中没有文件创建时间的概念
- java数据分析平台源码_DataGear数据可视化分析平台 v2.0.0
- JSTL 标签库详细介绍资料 .
- 540 - Team Queue
- 定时压缩log日志文件
- eclipse安装WindowBuilder Pro组件
- dell4528s linux_如何在戴尔PC上使用Ubuntu Linux终端
- python怎么一次输入两个数_python如何一次性输入多个数
- 石英晶振封装HC-49S HC-49U HC-49SMD(12mhz 11.0592mhz等)的关系与区别
- 将微信数据提取为exel表格(2022年版)免root 保姆级教程
- ISO4443A与ISO14443B的区别
- 15幅非常有创意的影子摄影作品欣赏
- 毕设 电脑维修_入库出库结算论文
- 二叉树的遍历(前序遍历,中序遍历,后序遍历)
- 物联网组网技术比较 NB-IoT、LoRa、ZigBee、WiFi、蓝牙等
- Settings学习总结(一)
- 《机器学习》 线性模型
- 手动给无线网设置一个DNS服务器地址,手动修改手机局域网无线网络的DNS地址
- 高阶 numpy 数组快速插值(高阶快插)算法探讨
- 脑残定义,超级经典!
热门文章
- 方法教程:如何下载网易云音乐上的视频到本地电脑
- js 获取手机型号和版本
- python和scre_python学习日志10
- JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
- Keil 5(MDK 5)中的 Pack Installer下载不了库文件包的解决替代方法(在Keil官网下载Packs库文件)
- 【云端软件】竞价实例(Spot instance):可节省80%-90%的云计算成本
- mysql节假日函数_如何在MySQL中计算不包括周末和节假日的日期差
- 密码学笔记1-信息安全的基本属性(机密性、认证、完整性、不可否认性)
- Python 斐波那契数列 及 杨辉三角
- 如何在App中打开设置、appstore或其他App(区别iOS 10及之前系统)