隐式类型转换?

时间:2011-11-17 04:17:20

标签: java grails arraylist set

我正在审核其他人的Grails代码,我看到以下内容:

Set<Integer> weeks = new ArrayList<Integer>()

看起来在设置此行之后,Grails认为周是HashSet。我不熟悉Java或Grails,并且(java)文档看起来像ArrayList扩展List和HashSet扩展Set,但是这种直接构造不起作用。这是Grails的事吗?感谢。

1 个答案:

答案 0 :(得分:4)

在Groovy中看new ArrayList<Integer>()有点不寻常,因为[]的工作方式相同而且冗长,所以我会把它写成Set<Integer> weeks = []。然后更清楚的是发生了什么 - Groovy正在将一种集合类型转换为另一种集合类型,[]真的是创建持有者和填充初始数据(如果有的话)的便捷方式。由于[]List的{​​{1}}以外的集合没有语法糖,因此您需要进行这些转换。

[:]可能是更常见的语法。这也更清楚,因为def weeks = [] as Set只是暂时的,并且使用“as”进行转换,而不仅仅是在左侧声明类型。

您也可以使用它将集合转换为数组。您不能使用Java语法来创建数组,因为它使用大括号并且看起来像Closure定义,因此您必须[]int[] numbers = new int[] { 1, 2, 3 }而不是int[] numbers = [1, 2, 3]