Созданный класс в Kotlin все еще возможно нулевой.Почему? - PullRequest
1 голос
/ 24 сентября 2019

Вопрос прост: в Kotlin, когда я создаю фрагменты arguments с помощью Bundle(), система все еще нуждается в объекте аргументов, который должен быть подтвержден с помощью !!.arguments определенно не должно быть нулевым, верно?Так зачем это нужно?

Вот код:

private fun openPinCodeFragment(mode: PinView.Mode) {
    currentFragment = PinCodeFragment()
    currentFragment?.run {
        arguments = Bundle()
        arguments!!.putSerializable(MODE, mode)
    }
    openFragment(currentFragment)
}

Если я уберу !!, тогда:

enter image description here

Ответы [ 2 ]

4 голосов
/ 24 сентября 2019

Вы устанавливаете значение переменной, которая была определена вне этой области (объявление arguments не отображается в вашем коде).

Независимо от того, что вы назначаете, оно могло быть измененопри выполнении кода достигает следующей строки значения null, другого значения Thread, поэтому здесь необходимо использовать !!.Я бы предложил определить arguments либо в локальной области с помощью val, либо сделать его необнуляемым в своем определении.

2 голосов
/ 24 сентября 2019

Это происходит потому, что arguments принадлежит Бандлу?type, это означает, что это может быть либо Bundle, либо null.

Вместо использования if для проверки, имеет ли оно значение null, как в Java, были введены операторы !! и ?.

Например, если вы хотите, чтобы ваш код был правильным без использования !!, вы можете добавить:

if (arguments != null) {
   arguments.putSerializable(MODE, mode)
}

Используя эти операторы, вы получаете следующую гибкость:

  1. !! - вы сообщаете компилятору, что значение не может быть нулевым, в противном случае оно выдаст ошибку;
  2. ? - вам все равно, если оно не равно нулю, оно получит доступметод и может вернуть результат, в противном случае результат такого вызова будет нулевым, и никаких действий не будет сделано.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...