Есть ли какой-нибудь способ использовать безопасный нулевой оператор для объекта, который не существует? - PullRequest
0 голосов
/ 30 августа 2018

Есть что-то вроде "?" который может вернуть ноль или ложь, если объект не существует.

Это выдает ошибку:

println doesntExist['sdfsd'​]​

Это не работает, но есть ли способ использовать "?" как-нибудь получить логическое значение?

println doesntExist?['sdfsd'​]​
println doesntExist['sdfsd'​]​?
println ?doesntExist['sdfsd'​]​

Есть ли отличный способ сделать это:

if (doesntExist && doesntExist['sdfsd'​]​ ){}

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете использовать метод get() или getAt(), который эквивалентен оператору доступа к индексу массива:

def doesntExist = null

println doesntExist?.getAt('sdfsd')
println doesntExist?.get('sdfsd')

Выход:

null
null

Объяснение

Если вы компилируете код, содержащий:

doesntExist['sdfsd']

и откройте его декомпилированную версию (например, в IntelliJ IDEA), вы увидите, что эта часть компилируется в

DefaultGroovyMethods.getAt(doesntExist, "sdfsd")

Поэтому, если вы хотите использовать нулевой безопасный оператор, вы должны позвонить

doesntExist?.getAt('sdfsd')

непосредственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...