groovy 与 java 差异 (1)

来源:互联网 发布:电视直播哪个软件最好 编辑:程序博客网 时间:2024/04/29 06:57

groovy 与 java 差异 (1)

groovy尽最大可能使java程序员无门槛使用。但其中有不少差异,我尝试列举,方便java程序员学习并适用。

缺省导入

这些包在groovy中是缺省自动导入的,你无需显示再次导入。

java.io.*

java.lang.*

java.math.BigDecimal

java.math.BigInteger

java.net.*

java.util.*

groovy.lang.*

groovy.util.*

方法重载调用差异

groovy选择调用那个方法是在运行时决定的,基于参数在运行时的类型;反之,java是在编译时决定的,基于申明的类型(静态方式)。下面代码,使用java 编写,编译成java和groovy,但行为不同。

int method(String arg) {    return 1;}int method(Object arg) {    return 2;}Object o = "Object";int result = method(o);

在 Java中, 结果为:

assertEquals(2, result);

而在Groovy中:

assertEquals(1, result);

这时因为java使用静态类型,被申明为Ojbect类型;而groovy是运行时决定,参数为String,所以结果不同。

数组初始化

在 Groovy中, { …​ } 专门用于定义闭包。所以不能如下面代码方式定义数组:

int[] array = { 1, 2, 3}

正确定义如下。

int[] array = [1,2,3]

包范围可见

groovy 中类中省略修饰符的属性,并不像java那样,在包内可以访问。

class Person {    String name}

反之,groovy创建一个属性,即属于private,并自动关联setter和getter方法。
如果你缺省需要创建包内private属性,可以使用@PackageScope注解:

class Person {    @PackageScope String name}

== 号的行为差异

java中 == 意味比较对象地址,而groovy是比较其值,is方法实现地址比较,如:a.is(b) .

1 0