Какова цель вопросительного знака (?) После переменной в Groovy

Я новичок в grails. Во многих примерах я обнаружил, что переменная может заканчиваться вопросительным знаком (?) как это

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

выше код содержит Если условие в том, что другое заканчивается на? поэтому я хочу знать смысл этого представления

Ответы

Ответ 1

?. - это нулевой безопасный оператор, который используется для предотвращения неожиданного NPE.

if ( a?.b ) { .. }

совпадает с

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

Но в этом случае is() уже является нулевым, поэтому вам это не понадобится

other.is( this )

должно быть хорошо.

Ответ 2

Существует тонкость ?., Безопасный навигатор, не упомянутый в ответе @dmahapatro.

Позвольте мне привести пример:

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 или false. Это имеет значение, если значение выражения передается другому выражению.