为什么我得到信息 Enum argument can be null in Java, but exhaustive when contains no null branch in Kotlin?
Why do I get the information Enum argument can be null in Java, but exhaustive when contains no null branch in Kotlin?
代码B运行正常,但是代码A出现如下警告提示(可以运行),为什么?
枚举参数在 Java 中可以为 null,但在不包含 null 分支时是详尽无遗的
我认为_playState.value
在代码B中也可以为空,我在代码B中使用exhaustive when
时是否应该添加空分支?
代码A
private val _selectAction = MutableLiveData<ESelect>()
val selectAction: LiveData<ESelect> = _selectAction
selectAction.observe(mLifecycleOwner) {
when(it) { //Enum argument can be null in Java, but exhaustive when contains no null branch
ESelect.SelectAll -> binding.chSelect.isChecked = true
ESelect.UnselectAll -> binding.chSelect.isChecked = false
ESelect.NoAction -> Unit
}
}
enum class ESelect{
SelectAll,
UnselectAll,
NoAction
}
代码B
private val _playState=MutableLiveData<EPlayState>()
override fun playOrPause(filename: String) {
when (_playState.value) {
EPlayState.STOPPED -> play(filename)
EPlayState.PLAYING -> pause()
EPlayState.PAUSED -> resume()
}
}
enum class EPlayState {
STOPPED,
PLAYING,
PAUSED
}
LiveData
写成Java
。传递给 observe()
函数的第二个参数是 Java 接口 Observer
的匿名实现。由于 Java 对 Kotlin 中的可空性一无所知,因此假定参数 it
可以为空。
代码B运行正常,但是代码A出现如下警告提示(可以运行),为什么?
枚举参数在 Java 中可以为 null,但在不包含 null 分支时是详尽无遗的
我认为_playState.value
在代码B中也可以为空,我在代码B中使用exhaustive when
时是否应该添加空分支?
代码A
private val _selectAction = MutableLiveData<ESelect>()
val selectAction: LiveData<ESelect> = _selectAction
selectAction.observe(mLifecycleOwner) {
when(it) { //Enum argument can be null in Java, but exhaustive when contains no null branch
ESelect.SelectAll -> binding.chSelect.isChecked = true
ESelect.UnselectAll -> binding.chSelect.isChecked = false
ESelect.NoAction -> Unit
}
}
enum class ESelect{
SelectAll,
UnselectAll,
NoAction
}
代码B
private val _playState=MutableLiveData<EPlayState>()
override fun playOrPause(filename: String) {
when (_playState.value) {
EPlayState.STOPPED -> play(filename)
EPlayState.PLAYING -> pause()
EPlayState.PAUSED -> resume()
}
}
enum class EPlayState {
STOPPED,
PLAYING,
PAUSED
}
LiveData
写成Java
。传递给 observe()
函数的第二个参数是 Java 接口 Observer
的匿名实现。由于 Java 对 Kotlin 中的可空性一无所知,因此假定参数 it
可以为空。