我正在检查别人的Grails代码,我看到了以下内容:
Set<Integer> weeks = new ArrayList<Integer>()看起来在设置了这一行之后,Grails认为weeks是一个HashSet。我既不精通Java也不精通Grails,(java)文档看起来像ArrayList扩展列表和HashSet扩展集,但这种直接构造不起作用。这是Grails的事情吗?谢谢。
发布于 2011-11-17 13:03:18
在Groovy中看到new ArrayList<Integer>()有点不常见,因为[]的工作原理是一样的,而且没有那么冗长,所以我会把它写成Set<Integer> weeks = []。然后就更清楚了- Groovy正在将一种集合类型转换为另一种集合类型,[]实际上是一种创建holder并填充初始数据(如果有的话)的便捷方法。由于除了用于List和[:]的[]之外,集合没有语法糖,因此您需要这些转换。
def weeks = [] as Set可能是更常见的语法。这一点也更清楚,因为[]只是临时的,使用"as“进行转换,并且比仅在左侧声明类型更明确。
您还可以使用它将集合转换为数组。您不能使用Java语法来创建数组,因为它使用大括号并且看起来像一个闭包定义,所以您必须使用int[] numbers = [1, 2, 3]或def numbers = [1, 2, 3] as int[]来代替int[] numbers = new int[] { 1, 2, 3 }。
https://stackoverflow.com/questions/8162049
复制相似问题