我正在审核其他人的Grails代码,我看到以下内容:
Set<Integer> weeks = new ArrayList<Integer>()
看起来在设置此行之后,Grails认为周是HashSet
。我不熟悉Java或Grails,并且(java)文档看起来像ArrayList扩展List和HashSet扩展Set,但是这种直接构造不起作用。这是Grails的事吗?感谢。
答案 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]
。