Разрешать !!когда он уверен, он не бросит NPE - PullRequest
0 голосов
/ 15 февраля 2019

Я смотрю на запрос на получение, который содержит !! - оператор утверждения, не равный NULL.Должно ли оно быть утверждено?

Само значение Nullable никогда не будет нулевым.Я не могу придумать лучшего аргумента, чем «Кажется неправильным»

private val hasFinishedSubject = BehaviorSubject.create<Boolean>()

init {
    hasFinishedSubject.onNext(false)
}

val hasFinishedScanner: Boolean
    get() = hasFinishedSubject.value!!

Поскольку hasFinishedSubject инициализируется при построении, hasFinishedSubject.value никогда не будет нулевым

Его можно заменитьс помощью fi:

val hasFinishedScanner: Boolean
    get() = hasFinishedSubject.value ?: false

, но это false избыточно и может привести к ошибкам.Какой самый чистый?

1 Ответ

0 голосов
/ 15 февраля 2019

Компилятор Kotlin учитывает аннотации обнуляемости из Java, например, @Nullable или @NotNull из JSR-305 или intelliJ.https://kotlinlang.org/docs/reference/java-interop.html#nullability-annotations

Возможно, имеет смысл включить эти аннотации в класс BehaviorSubject, если у вас есть контроль над ним.

С другой стороны, в Kotlin есть типы платформ, которые используются для упрощения проверки обнуляемости во взаимодействии Java.https://kotlinlang.org/docs/reference/java-interop.html#null-safety-and-platform-types

С моей точки зрения, следует избегать использования !! с кодом Kotlin, в Kotlin есть достаточно способов сделать ваш код Nullable-корректным.

Для взаимодействия Java - это может произойти.Но вместо использования !! можно использовать что-то более значимое, например, то, что вы предложили выше.

Я бы, вероятно, написал что-то вроде:

val hasFinishedScanner: Boolean
    get() = hasFinishedSubject.value ?: error("No value")

Здесь функция error имеет тип возвращаемого значения Nothing, фактически она выдает исключение.

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