1

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

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

class AppViewModel : ViewModel() {

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

(但我收到错误类型不匹配。必需:LiveData<List> 找到:MutableLiveData<MutableList>

当我更改它val tasks: LiveData<List<Task>> = _tasksval tasks: LiveData<MutableList<Task>> = _tasks它可以工作,但我希望Listin 任务不可编辑

4

1 回答 1

1

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

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

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

于 2021-04-09T17:05:52.357 回答