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

以前就有说过,不少人之因此选择Groovy就是由于其学习成本低,只要你有Java的基础,学起来至关快。与此对比的是Scala(另外一种JVM动态语言)语法就比较难学(虽然还没学过,可是网上的评论是这样的)。java

做为一个Java程序员,我要逐渐把本身Groovy。python

 

从JDK到GDK程序员

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

二、Groovy与Java的血缘佐证学习

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

运行结果:spa

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

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

再来一个例子:code

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()方法。blog

 

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

再次重申这一点,主要是由于在学习Groovy的过程当中,常常会有这样的感叹“唉,这个居然不须要作了”又或者是“这个居然能够这么简单的写!”,其轻量、快捷的特色体如今许多方面。

一、安全导航操做符(?.)

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

二、分号可省,引用能够不具名(用def就能够了)

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

四、return也能够省

五、getter、setter也省了,相似car.engine实际上是调用car.getEngine()

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

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

八、经过使用as和asType,代码块能够直接做为接口的实现被传入

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

十、静态导入,导入静态方法(相似于python,可使用as建立别名),直接经过方法名引用

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

十二、相似于lombok的注解

1三、操做符重载(在设计DSL的时候超级有用)

 

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

一、布尔值的求解

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

 

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

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

二、Java代码中若是变量名为it这样的Groovy关键字,会报错。

 

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