Почему intent.getParcelableExtra не возвращает обнуляемый тип в kotlin? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть пример извлечения данных из намерения

val screen = intent.getParcelableExtra<Screen>("screen")

Результат, который я получил, является ненулевой переменной, но она может быть нулевой, потому что я не знаю, был ли этот пакет добавлен в дополнительные функции. Почему kotlin не возвращает обнуляемый тип?

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

в коде

val screen = intent.getParcelableExtra<Screen>("screen")

предполагаемый тип screen будет Screen!. Восклицательный знак указывает, что это тип платформы , что означает, что он может или не может иметь значение NULL, но компилятор не будет применять поведение проверки нуля.

Подробнее: Нулевая безопасность и типы платформ

Если вы хотите, чтобы Kotlin обеспечивал нулевую безопасность, вы можете явно указать тип:

val screen: Screen? = intent.getParcelableExtra<Screen>("screen")

Указав тип явно, Kotlin предоставит вам всю нулевую безопасность во время компиляции, к которой вы привыкли.

0 голосов
/ 01 ноября 2018

Kotlin просто вызывает getParcelableExtra(), как это определено в Android SDK в Java. Этот метод не аннотирован @Nullable, поэтому kotlin не знает, что он может вернуть ноль.

Также см. аннотации обнуления :

Аннотации обнуляемости
Типы Java, которые имеют аннотации обнуляемости представлены не как типы платформ, а как фактические обнуляемые или ненулевые типы Котлина. Компилятор поддерживает несколько разновидностей Nullability аннотации, в том числе:

  • JetBrains (@Nullable и @NotNull из org.jetbrains.annotations пакет)
  • Android (com.android.annotations и android.support.annotations)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...