gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:09:29 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com