码迷,mamicode.com
首页 > 编程语言 > 详细

Groovy学习笔记(二)—— 从Java到Groovy

时间:2015-11-09 17:11:28      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

之前就有说过,很多人之所以选择Groovy就是因为其学习成本低,只要你有Java的基础,学起来相当快。与此对比的是Scala(另一种JVM动态语言)语法就比较难学(虽然还没学过,但是网上的评论是这样的)。

作为一个Java程序员,我要逐渐把自己Groovy。

 

从JDK到GDK

1、JDK作为Java开发的核心,是所有Java程序员都需要学习和使用的部分。Groovy在设计GDK的时候非常贴心贴心贴心(重要的感情抒发三遍),GDK可以认为是JDK的扩展和超集,很多Java API在GDK里你都可以找到,甚至是Java文件都可以用Groovy编译运行,这为混合使用Java和Groovy提供了极大的便利,Java程序员可以以极低的代价来嵌入Groovy代码,扩展Java,提高编写效率。

2、Groovy与Java的血缘佐证

1 def str = "I‘m a String"
2 println str.class.name

运行结果:

1 java.lang.String
2 [Finished in 0.7s]

可以看出,Groovy中的对象其实就是Java对象,虽然它可能已经被扩展了。

再来一个例子:

1 def num = 3
2 num.upto(5){println "$it"}
3 println num.class.name

运行结果:

1 3
2 4
3 5
4 java.lang.Integer
5 [Finished in 0.7s]

Groovy扩展了Integer,加入了upto()方法。

 

Groovy是轻量化的Java(各种省)

再次重申这一点,主要是因为在学习Groovy的过程中,经常会有这样的感叹“唉,这个竟然不需要做了”又或者是“这个竟然可以这么简单的写!”,其轻量、快捷的特点体现在许多方面。

1、安全导航操作符(?.)

Java里充斥着if (obj != null){obj.doSomething();}的代码,但是在Groovy里,仅需obj?.doSomething()。瞬间感觉Java弱爆了~

2、分号可省,引用可以不具名(用def就可以了)

3、不想catch就不用处理异常,而不是Java里被throws逼的必须写

4、return也可以省

5、getter、setter也省了,类似car.engine其实是调用car.getEngine()

6、具名参数(再也不用记住参数顺序了)

7、多赋值(感觉学的python,不需要为了返回多值而建个莫名其妙的类了)

8、通过使用as和asType,代码块可以直接作为接口的实现被传入

9、更便捷的循环 例如for(i in 0..100){}

10、静态导入,导入静态方法(类似于python,可以使用as创建别名),直接通过方法名引用

11、编译时不进行类型检查的范型(Groovy只会在运行时推断,推断失败了就抛异常)

12、类似于lombok的注解

13、操作符重载(在设计DSL的时候超级有用)

 

好吧,Groovy也有我讨厌的部分(学到目前而言)

1、布尔值的求解

不同类型的规则竟然还不一样,比如Collection非空为true,Number不为0等等。隐式就是灾难啊!谁知道动态运行时莫明奇妙的拿了个什么类型的对象拿去判断,计算布尔值。

 

Groovy设计者给Java程序员挖的坑:

1、Groovy中的==等于Java中的equals()方法,Java中的==用来判断引用是否相同,在Groovy中对应is()方法

2、Java代码中如果变量名为it这样的Groovy关键字,会报错。

 

简单总结下,除了一小部分不同外,Groovy的语法与Java极为相似,相互的兼容性很好;Groovy就是Java的动态扩展。

Groovy学习笔记(二)—— 从Java到Groovy

标签:

原文地址:http://www.cnblogs.com/jingting/p/4947632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!