我对Java和Groovy很陌生,下面的Groovy脚本遇到了麻烦。为了便于调试,我创建了这个简化版本的大型脚本。
脚本正在迭代一个列表,试图计算列表中所有对象的值的运行总数。这些对象的部分或全部值可能为空。
脚本
class Field {
def name
def value
}
def fields = [
new Field(name:'Annuities %', value:75),
new Field(name:'Other %', value:null),
]
def totalFunding = fields.inject(0) {int total, Field myField ->
total + myField?.value as Integer
}它会得到以下错误:
Exception thrown: java.lang.NullPointerException
java.lang.NullPointerException
at Script3$_run_closure1.doCall(Script3:15)
at Script3.run(Script3:14)容纳空值的正确方法是什么?
谢谢你,贝琪
发布于 2010-05-21 14:20:28
只需将totalFunding更改为:
def totalFunding = fields.value.inject(0) {int total, value ->
total += value ?: 0
}value ?: 0是指
value != null ? value : 0同样在原始函数中,忘记将新值赋回total变量。
发布于 2015-04-20 14:52:59
您也可以在闭包中使用sum,而不是inject。
def totalFunding = fields.value.sum { it ?: 0 }
https://stackoverflow.com/questions/2882754
复制相似问题