Groovy每个方法返回不正确的结果

时间:2014-08-01 18:13:49

标签: java types groovy closures inference

在一些Groovy代码中,我写了一行

def intCurrentArray = currentVersion.tokenize('.').each({x -> Integer.parseInt(x)})

解析格式化为版本号XX.XX.XX.XX的字符串,并将生成的字符串列表转换为整数列表。但是,Groovy将intCurrentArray推断为字符串列表,导致转换不正确。当我将行更改为:

ArrayList intCurrentArray = []
for (x in currentVersion.tokenize('.'))
   intCurrentArray.add(Integer.parseInt(x))

转换工作正常。为什么每种方法都会给出时髦的结果? Groovy不会查看闭包内部以帮助推断intCurrentArray的类型吗?

1 个答案:

答案 0 :(得分:1)

each返回它迭代的相同列表。使用collect代替从作为参数传递的闭包的每个结果构建一个新列表:

def intCurrentArray = "99.88.77.66".tokenize('.').collect { it.toInteger() }

assert intCurrentArray == [99, 88, 77, 66]

或传播运营商:

def intCurrentArray = "99.88.77.66".tokenize('.')*.toInteger()