概述
与Java的区别
对于Java开发者,Groovy尽可能变得自然。Groovy在被设计时尽力遵守最小惊喜原则,特别是对于来自Java背景的学习Groovy的开发者。
1 默认引入
以下包与类默认引入,即,不需要使用显式import语句来使用它们:
- java.io.*
- java.lang.*
- java.math.BigDecimal
- java.math.BigInteger
- java.net.*
- java.util.*
- groovy.lang.*
- groovy.util.*
2 多方法
Grovvy在运行时选择调用的方法。这被成为运行时调度或多方法。这意味着,方法的选择基于运行时参数的类型。这与Java有所不同,Java中在编译时完成方法的选择,基于声明类型。
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使用静态类型信息,o被声明为Object,而Groovy则是在运行时当方法被确实调用时选择。由于它被作为String调用,于是String版本将会被调用。
3 数组初始化器
Groovy中,{…}块被保留用于闭包。这意味着不能使用如下语法创建数组字面值:
int[] array = {1, 2, 3}
可以选择使用:
int[] array = [1, 2, 3]
4 包范围可见性
在Groovy中,忽略字段上的修饰符并不会导致其成为Java中的包私有字段:
class Person {
String name
}
这被用于创建一个属性,即私有字段以及与之关联的getter与setter。
通过注解@PackageScope可以窗机哪一个包私有字段:
class Person {
@PackageScope String name
}
5 ARM块
Java 7的ARM(自动资源管理,Automatic Resourec Management)在Groovy中并不支持。但是,Groovy提供了基于闭包的不同方法,这些方法与ARM具有相同的效果并且更具惯用性。
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
}
}
翻译源:Groovy 文档
最后
以上就是高挑鸵鸟为你收集整理的Groovy与Java的区别(一)的全部内容,希望文章能够帮你解决Groovy与Java的区别(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复