java - 为什么我不能在 Kotlin 中编写这个特定的作业?
问题描述
我在一个项目中使用 MVI 模式,所以我编写了 State 和 Event 类。对于 viewModel 中的 Event 部分,我使用 MutableLiveData 类型的私有属性 _event,并将其作为 LiveData 公开给 Activity,这样:
private val _event = MutableLiveData<Event>()
val event: LiveData<Event>
get() {
return _event
}
在我需要使用 Google 的这个示例代码中的 SingleLiveEvent 类(而不是它的超类型 MutableLiveData)之前,一切都运行良好;SingleLiveEvent 类扩展了 MutableLiveData,后者又扩展了 LiveData。
所以我想我可以写这样的东西:
private val _event: LiveData<Event> = SingleLiveEvent()
val event: LiveData<Event>
get() {
return _event
}
但我在编辑器中收到此错误:
类型不匹配。必需:LiveData<ConfirmTransactionViewModel.Event> 找到:SingleLiveEvent<ConfirmTransactionViewModel.Event>
我错过了什么?SingleLiveEvent 是 LiveData 的子类型,并且具有相同的类型参数,那么为什么这个赋值不起作用呢?
提前致谢
解决方案
不是 100% 肯定,但我敢打赌,您将SingleLiveEvent<T>
Java 代码自动转换为 Kotlin,并将其声明为子类MutableLiveData<T?>
而不是MutableLiveData<T>
.
推荐阅读
- apache-spark - Databricks 社区版集群无法启动
- ruby-on-rails - 彪马。是否可以获得当前正在运行的请求
- c# - 如何在 C# 中以相同的方法处理数字和可为空的数字变量
- speech-to-text - Microsoft Azure 的语音转文本识别服务支持的自定义语法?
- python - 如何在 cgo 中使用包装器释放 unsafe.Pointer?
- python - 在带有硒的网站上找不到元素
- mysql - 使用 DataTable 的服务器端处理如何工作?
- git - 如何解决密码验证被移除 2021 年 8 月 13 日错误,同时推入 master?
- python - SQL 3 查询表1中表2列值的条件
- java - 如何在序列化 Avro 消息时传递 Null 值