为什么我不能用 Kotlin 编写这个特定的作业?
Why can't I write this particular assignment in Kotlin?
我在一个项目中使用 MVI 模式,所以我写了状态和事件 classes。对于 viewModel 中的事件部分,我使用了 MutableLiveData 类型的私有 属性 _event,并将其作为 LiveData 公开给 Activity,这样:
private val _event = MutableLiveData<Event>()
val event: LiveData<Event>
get() {
return _event
}
在我需要使用来自 Google 的 sample code 中的 SingleLiveEvent class(而不是它的超类型 MutableLiveData)之前,一切都运行良好; SingleLiveEvent class 扩展了 MutableLiveData,后者又扩展了 LiveData。
所以我想我可以写这样的东西:
private val _event: LiveData<Event> = SingleLiveEvent()
val event: LiveData<Event>
get() {
return _event
}
但我在编辑器中收到此错误:
类型不匹配。
必需:LiveData
发现:SingleLiveEvent
我错过了什么? SingleLiveEvent 是 LiveData 的子类型,并且具有相同的类型参数,那么为什么这个赋值不起作用?
提前致谢
不是 100% 确定,但我敢打赌你自动将 SingleLiveEvent<T>
Java 代码转换为 Kotlin,并将其声明为 MutableLiveData<T?>
的子类而不是 MutableLiveData<T>
.
我在一个项目中使用 MVI 模式,所以我写了状态和事件 classes。对于 viewModel 中的事件部分,我使用了 MutableLiveData 类型的私有 属性 _event,并将其作为 LiveData 公开给 Activity,这样:
private val _event = MutableLiveData<Event>()
val event: LiveData<Event>
get() {
return _event
}
在我需要使用来自 Google 的 sample code 中的 SingleLiveEvent class(而不是它的超类型 MutableLiveData)之前,一切都运行良好; SingleLiveEvent class 扩展了 MutableLiveData,后者又扩展了 LiveData。
所以我想我可以写这样的东西:
private val _event: LiveData<Event> = SingleLiveEvent()
val event: LiveData<Event>
get() {
return _event
}
但我在编辑器中收到此错误:
类型不匹配。
必需:LiveData
我错过了什么? SingleLiveEvent 是 LiveData 的子类型,并且具有相同的类型参数,那么为什么这个赋值不起作用?
提前致谢
不是 100% 确定,但我敢打赌你自动将 SingleLiveEvent<T>
Java 代码转换为 Kotlin,并将其声明为 MutableLiveData<T?>
的子类而不是 MutableLiveData<T>
.