无法在空对象上调用方法 multiply() groovy

Cannot invoke method multiply() on null object groovy

考虑下面的代码

task circle {
doLast {
    float r = Float.parseFloat(project.properties["radius"])
    println (22/7)*(r ** 2)
}
}
task square {
     doLast {
       float s = Float.parseFloat(project.properties["side"])
       println s*s
     }
}

这会给出错误 Cannot invoke method multiply() on null object

如果我把上面的代码改成下面这样就好了

task circle {
doLast {
    float r = Float.parseFloat(project.properties["radius"])
    println 22/7*(r ** 2)
}
}
task square {
     doLast {
       float s = Float.parseFloat(project.properties["side"])
       println s*s
     }
}

可能是什么原因?

这里的问题是缺少实际 println 的括号,即 将导致执行以下代码 (println(22/7))*(r ** 2)println 首先完成,其结果 (void) 变为 null。然后它会抛出您看到的错误。你的“不扔” 示例将解析器推向正确的方向。

groovy 中的括号是“如果没有歧义则可选”,这是一个相当广泛的 学期。当然,新的鹦鹉解析器让这变得更好了,你 经常会看到这样的事情炸毁。简单的经验法则:只是 除非你正在处理,否则不要遗漏调用函数的括号 用一个微不足道的术语。