Groovy学习笔记(二)—— 从Java到Groovy
2015-11-09 16:44
274 查看
之前就有说过,很多人之所以选择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的血缘佐证
运行结果:
可以看出,Groovy中的对象其实就是Java对象,虽然它可能已经被扩展了。
再来一个例子:
运行结果:
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的动态扩展。
作为一个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的血缘佐证
def str = "I'm a String" println str.class.name
运行结果:
java.lang.String [Finished in 0.7s]
可以看出,Groovy中的对象其实就是Java对象,虽然它可能已经被扩展了。
再来一个例子:
def num = 3 num.upto(5){println "$it"} println num.class.name
运行结果:
3 4 5 java.lang.Integer [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的动态扩展。
相关文章推荐
- springmvc中的上传文件
- eclipse 导入先前存在的项目
- Java读取Properties文件的方法
- java中文数字转换成阿拉伯数字
- Java — String(字符串)
- Java基础学习21(代码块)
- springmvc restful风格支持
- Java异常处理机制【转载】
- mac 配置eclipse svn解决javaHL问题
- web.xml中的contextConfigLocation在spring中的作用
- Java实战-坦克大战
- Android-ubuntu开发笔记之JDK环境搭建
- JAVA中的内存们
- Java汉字转拼音pinyin4j用法
- eclipse中LogCat有时不显示信息的简单解决办法
- eclipse中LogCat有时不显示信息的简单解决办法
- java Socket用法详解
- java 反射调用带回调接口的函数
- JAVA 数组拷贝
- Eclipse在Win10中ADT、SDK配置时出错