我是靠谱客的博主 高挑鸵鸟,最近开发中收集的这篇文章主要介绍Groovy与Java的区别(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

与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的区别(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部