Kotlin,Android - 如何将 MutableLiveData<MutableList< something >> 转换为 LiveData<List< something >>

Kotlin, Android - How to transform MutableLiveData<MutableList< something >> to LiveData<List< something >>

在我有 MutableLiveData<MutableList<object>> 的 ViewModel 中,我想创建 LiveData<List<object>>,但我不知道如何创建 List来自 MutableList.

这是我正在尝试做的事情:

class AppViewModel : ViewModel() {

    private val _tasks = MutableLiveData<MutableList<Task>>(mutableListOf())
    val tasks: LiveData<List<Task>> = _tasks
}

(但我收到错误 类型不匹配。需要:LiveData 找到:MutableLiveData

当我将 val tasks: LiveData<List<Task>> = _tasks 更改为 val tasks: LiveData<MutableList<Task>> = _tasks 时它起作用了,但我希望任务 中的 List 不可编辑

LiveData 在 Java 中定义,其中没有声明站点差异。 (如果它是在 Kotlin 中定义的,他们可能会让类型协变 out 来避免这个问题。)为了解决这个问题,您可以使用 use-site variance 使其协变:

val tasks: LiveData<out List<Task>> = _tasks

协变意味着您无法从此引用修改其内容,这对于只读 LiveData 来说已经是正确的。这只是让编译器知道它。将其标记为协变允许将 MutableList 类型向上转换为 List 类型。