Почему kotlin не позволяет использовать нулевой оператор индексации? - PullRequest
0 голосов
/ 31 октября 2019

Мы привыкли к оператору индексирования при доступе к Картах.

fun fun1(map: Map<*, *>) {
    assert(map.get("key") === map["key"])
}

Но почему оператор индексирования не может использоваться для Обнуляемого Карты? Следующий код не компилируется.

fun fun2(map: Map<*, *>?) {
    assert(map?.get("key") === map?["key"])
}
                                  ^^^ 

1 Ответ

1 голос
/ 31 октября 2019

Почему kotlin не позволяет использовать нулевой оператор индексации?

Причина, по которой вы не можете использовать map?.[K], заключается в том, что этот синтаксис не поддерживается. Это давний запрос. Вот 4-летняя проблема для него: https://youtrack.jetbrains.com/issue/KT-8799

Вместо этого используйте эквивалентный синтаксис метода, который равен map.get(T) вместо map[T], то есть то, что у вас сначала:

fun fun2(map: Map<*, *>?) {
    assert(map?.get("key") === map?.get("key"))
}

Вы можете найти в официальных документах , что .get() - это то, что реализует оператор []. Другими словами, компилятор переводит [] в .get() за кулисами, так что в этом случае вы могли бы также вызвать его напрямую.

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