groovy 与 java 差异 (1)

本文探讨了Groovy与Java之间的关键差异,包括缺省导入、方法调用、数组初始化等方面的不同,帮助Java程序员快速掌握Groovy的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值