Groovy学习-和java的区别

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值