为什么我得到的信息 Enum 参数在 Java 中可以为空,但在 Kotlin 中不包含空分支时却是详尽无遗的?

Hel*_*oCW 4 kotlin android-livedata

代码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  
}
Run Code Online (Sandbox Code Playgroud)

代码 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
}
Run Code Online (Sandbox Code Playgroud)

小智 6

LiveData写在Java. 传递给observe()函数的第二个参数是 Java 接口的匿名实现Observer。由于 Java 对 Kotlin 中的it可空性一无所知,因此假定参数可以为空。