我检讨别人的Grails的代码,我看到以下内容:隐式类型转换?
Set<Integer> weeks = new ArrayList<Integer>()
它看起来像后,该行设定的是,Grails认为周是HashSet
。我不熟悉Java或Grails,并且(java)文档看起来像ArrayList extends List和HashSet extends Set,但是这种直接构造不起作用。这是一个Grails的事情吗?谢谢。
我检讨别人的Grails的代码,我看到以下内容:隐式类型转换?
Set<Integer> weeks = new ArrayList<Integer>()
它看起来像后,该行设定的是,Grails认为周是HashSet
。我不熟悉Java或Grails,并且(java)文档看起来像ArrayList extends List和HashSet extends Set,但是这种直接构造不起作用。这是一个Grails的事情吗?谢谢。
在Groovy看到new ArrayList<Integer>()
有些不寻常,因为[]
的工作原理相同而且不太冗长,所以我会把它写成Set<Integer> weeks = []
。然后它会更清楚地说明发生了什么 - Groovy正在将一种集合类型转换为另一种集合类型,其中[]
确实是一种创建持有者并填充初始数据(如果有的话)的便捷方式。由于除[]
之外的List
和[:]
之外没有任何语法糖,因此您需要进行这些转换。
def weeks = [] as Set
可能是更常见的语法。这也是更清晰的,因为[]
只是暂时的,并且使用“as”进行转换,并且更明确地不仅仅是在左侧声明类型。
您也可以使用它将集合转换为数组。您不能使用Java语法来创建数组,因为它使用大括号并且看起来像一个Closure定义,所以您不必使用int[] numbers = new int[] { 1, 2, 3 }
来做int[] numbers = [1, 2, 3]
或def numbers = [1, 2, 3] as int[]
。
我不知道圣杯,但是这段代码编译好吗?有没有TypeMismatch错误> – Zohaib