首页 > 解决方案 > 为什么我不能在 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 的子类型,并且具有相同的类型参数,那么为什么这个赋值不起作用呢?

提前致谢

标签: javaandroidkotlingenericsandroid-viewmodel

解决方案


不是 100% 肯定,但我敢打赌,您将SingleLiveEvent<T>Java 代码自动转换为 Kotlin,并将其声明为子类MutableLiveData<T?>而不是MutableLiveData<T>.


推荐阅读