加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy 与 java 差异 (1)

发布时间:2020-12-14 16:42:06 所属栏目:大数据 来源:网络整理
导读:groovy 与 java 差异 (1) groovy尽最大可能使java程序员无门槛使用。但其中有不少差异,我尝试列举,方便java程序员学习并适用。 缺省导入 这些包在groovy中是缺省自动导入的,你无需显示再次导入。 java.io.* java.lang.* java.math.BigDecimal java.math.B

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,3]

包范围可见

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

class Person {
    String name
}

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

class Person {
    @PackageScope String name
}

== 号的行为差异

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读