在Groovy中的变量之后问号(?)的目的是什么?

时间:2014-06-12 14:00:40

标签: groovy

我是grails的新手我在许多例子中发现变量可能以问号(?)结尾 像这样

boolean equals(other) {
    if(other?.is(this))
    return true
}

上面的代码包含If条件,其他的以?结尾?所以我想知道该表示的含义

2 个答案:

答案 0 :(得分:53)

?.是一个空安全运算符,用于避免意外的NPE。

if ( a?.b ) { .. }

相同
if ( a != null && a.b ) { .. }

但是在这种情况下is()已经是空的安全,所以你不需要它

other.is( this )

应该是好的。

答案 1 :(得分:8)

在{dmahapatro的回答中没有提到JSONObject rec = json.getJSONObject("record"); String name = rec .get("name") .toString(); // optionally put the string value back into your JSON: rec.put("name", name); Safe navigation operator的微妙之处。

让我举个例子:

?.

换句话说,def T = [test: true] def F = [test: false] def N = null assert T?.test == true assert F?.test == false assert N?.test == null // not false! 仅在测试布尔值时与a?.b相同。不同之处在于,第一个可以评估为a != null && a.ba.b,而第二个可以只评估为nulla.b。如果将表达式的值传递给另一个表达式,则这很重要。