Нулевая безопасность при сравнении IF в Kotlin - PullRequest
1 голос
/ 19 января 2020

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

imageFile.addListener { _ , oldValue : File?, newValue : File? ->
    run{
        if(oldValue?.absolutePath != newValue?.absolutePath) loadFile()
    }
}

Он отлично работает , однако, если я изменю его на

imageFile.addListener { _ , oldValue : File?, newValue : File? ->
    run{
        if(oldValue!!.absolutePath != newValue?.absolutePath) loadFile()
    }
}

Он выдает NullPointerException, и это очевидно, потому что при запуске приложения oldValue равно NULL.

Как Kotlin управляет этим сравнением в первый раз?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 19 января 2020

Вы используете безопасный вызов , который избегает NullPointerException:

опция - это оператор безопасного вызова, записанный ?.

возврат NULL, если любое из свойств в нем равно NULL .

Второй параметр Оператор утверждения не равен NULL Выдает исключение

!! Оператор

оператор утверждения с ненулевым значением (!!) преобразует любое значение в ненулевой тип, а создает исключение, если значение является нулевым

...