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

标签 kotlin android-livedata

Code B 运行良好,但是 Code A 得到以下警告提示(它可以运行),为什么?
枚举参数在 Java 中可以为空,但在不包含空分支时是详尽的
我认为 _playState.value在代码 B 中也可以为空,是否应该在使用 exhaustive when 时添加空分支?在代码 B 中?
代码 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 接口(interface) Observer 的匿名实现.由于 Java 对 Kotlin 中的可空性一无所知,因此参数 it假定可以为空。

关于kotlin - 为什么我得到信息 Enum 参数在 Java 中可以为空,但在 Kotlin 中不包含空分支时却是详尽无遗的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64886681/

相关文章:

function - 在Kotlin中将异常用作默认参数

android - LiveData 无法观察到变化

android - 即使我提供了每页加载的数据量,数据源也始终从房间数据库返回完整数据

android - 尝试设置 Jetpack Compose 时遇到问题 找到接口(interface) rPluginContext

java - 使用 Gradle 在 Spring Boot 项目中引用来自 Kotlin 测试的 Java 代码时出现未解析的引用

方法文档中的 Kotlin 静态字段值?

Android - 带有 LiveData 组件的 MVVM 和 Repository 中的 Retrofit 调用

java - 如何在 fragment 中使用 ViewModel?

android - : Landroid/arch/core/executor/AppToolkitTaskExecutor 解析失败

performance - 在不损失速度的情况下去除可变性