繁体   English   中英

隐式类型转换?

[英]Implicit Type Conversion?

我正在查看其他人的Grails代码,并且看到以下内容:

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

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

在Groovy中,看到new ArrayList<Integer>()有点不寻常,因为[]工作原理相同,而且不太冗长,所以我将其写为Set<Integer> weeks = [] 然后,事情就变得更加清楚了-Groovy正在将一种集合类型转换为另一种集合类型,而[]确实是创建保存器并填充初始数据(如果有)的便捷方法。 由于除了[]List[:]之外,没有用于集合的语法糖,您需要这些转换。

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

您还可以使用它来将集合转换为数组。 您不能使用Java语法来创建数组,因为它使用花括号并且看起来像一个闭包定义,因此您必须使用int[] numbers = [1, 2, 3]代替int[] numbers = new int[] { 1, 2, 3 } int[] numbers = [1, 2, 3]def numbers = [1, 2, 3] as int[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM