我正在查看一个拉取请求,其中包含!!
-非空的断言运算符。应该批准吗?
可为空的值本身实际上永远不会为空。我想不出比“感觉不对劲”更好的说法了
private val hasFinishedSubject = BehaviorSubject.create<Boolean>()
init {
hasFinishedSubject.onNext(false)
}
val hasFinishedScanner: Boolean
get() = hasFinishedSubject.value!!
由于hasFinishedSubject
是在构造过程中初始化的,因此hasFinishedSubject.value
永远不会为空
可以用f.i.代替:
val hasFinishedScanner: Boolean
get() = hasFinishedSubject.value ?: false
,但此错误是多余的,并且也可能导致错误。最干净的是什么?
答案 0 :(得分:0)
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-correct。
对于Java互操作-可能会发生。但是除了使用!!
以外,您还可以使用其他有意义的内容,例如您上面建议的内容。
我可能会写类似的东西:
val hasFinishedScanner: Boolean
get() = hasFinishedSubject.value ?: error("No value")
error
函数的返回类型为Nothing
,实际上,它引发了异常。