Groovy学习-和java的区别

本文对比了Groovy和Java两种编程语言的主要不同之处,包括默认导入包的不同、方法调用方式的区别、数组定义的语法差异、包的范围可见性的处理方式、资源管理的支持情况、内部类的创建方式、Lambda表达式的使用、GString的概念以及字符串和字符的处理等。

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

groovy是针对JVM的一种动态编程语言。

官方文档地址:http://www.groovy-lang.org/differences.html#_default_imports

部分翻译:

和java的一些区别:
1 默认导入包:
- java.io.*
- java.lang.*
- java.math.BigDecimal
- java.math.BigInteger
- java.net.*
- java.util.*
- groovy.lang.*
- groovy.util.*

2 方法:在Groovy中,方法在运行时调用。这意味方法在运行时会根据值的类型进行选择:
java
int method(String arg) {
return 1;
}
int method(Object arg) {
return 2;
}
Object o = "Object";
int result = method(o);
//在java中 结果返回的是2;而Groovy中 返回的是1
//这是因为java根据类型的定义去调用相应的方法(在这里是object类型)而groovy在运行时根据值的类型("Object"是string类型)调用相应方法

3 数组的定义:在Groovy中{…}被保留给闭包使用,所以只能用[…]这种格式
java
int[] array = [1,2,3];

4 包的范围可见性:在Groovy中省略定义包或属性的类型不代表java中的缺省类型,如果是缺省类型再Groovy中以@packageScope的方式调用;省略类型的属性代表该属性私有,且默认使用getter/setter方法。
java
class person{
String name;
}
//相当于:
class person{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
//如果是缺省类型写为:
class person{
@packageScope String name;
}

5 ARM(Automatic Resource Management):从java7开始不支持ARM;相应的,在Groovy中提供了一些惯用方法代替。

“`java
Path file = Paths.get(“/path/to/file”);
Charset charset = Charset.forName(“UTF-8”);
try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}

} catch (IOException e) {
  e.printStackTrace();
}
//可以写成这样:
  new File('/path/to/file').eachLine('UTF-8') {
  println it
}

//或者更接近java:

new File('/path/to/file').withReader('UTF-8') { reader ->
 reader.eachLine {
     println it
 }

};
“`

6 内部类:
- 静态内部类(推荐)
java
class A {
static class B {}
}
new A.B()

- 匿名内部类(略)
- 创建非静态内部类:
java
public class Y {
public class X {}
public X foo() {
return new X();
}
public static X createX(Y y) {
return y.new X();
}
}
//Groovy不支持y.new X() 格式.代替的写成:new X(y)
public class Y {
public class X {}
public X foo() {
return new X()
}
public static X createX(Y y) {
return new X(y)
}
}
// Groovy supports calling methods with one parameter without giving an argument;我理解的是:groovy支持调用带一个参数的方法但是没有传入参数,然后改参数的值被默认设为null;同样的规则适用于构造函数

7 lambdas:java8支持lambdas和方法引用,而groovy不支持
java
Runnable run = () -> System.out.println("Run");
list.forEach(System.out::println);

在groovy中:
html
Runnable run = { println 'run' };
list.each { println it };
// or list.each(this.&println)

8 GString:双引号括起来的值被当做GString;groovy会自动在GString和String中转换;当一个类名的字符串包含美元符号$时编译器可能会报错。

9 字符串和字符:单引号的是String ;(略…)

10 a==b :在groovy中翻译为a.compareTo(b)==0或者a.equals(b),a.is(b);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值