我是grails的新手我在许多例子中发现变量可能以问号(?)结尾 像这样
boolean equals(other) {
if(other?.is(this))
return true
}
上面的代码包含If条件,其他的以?结尾?所以我想知道该表示的含义
答案 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.b
或a.b
,而第二个可以只评估为null
或a.b
。如果将表达式的值传递给另一个表达式,则这很重要。