在ViewModel中我有MutableLiveData<MutableList<object>>
,我想創(chuàng)建LiveData<List<object>>
,但是我不知道如何從MutableList
創(chuàng)建List
。
我想做的是:
class AppViewModel : ViewModel() {
private val _tasks = MutableLiveData<MutableList<Task>>(mutableListOf())
val tasks: LiveData<List<Task>> = _tasks
}
(但我發(fā)現(xiàn)錯(cuò)誤類型不匹配。必需:LiveData<List>找到:MutableLiveData<MutableList>)
當(dāng)我將val tasks: LiveData<List<Task>> = _tasks
更改為val tasks: LiveData<MutableList<Task>> = _tasks
時(shí),它可以工作,但我希望任務(wù)中的List
不可編輯。
LiveData是用Java定義的,其中沒有declaration-site變量。(如果它是在Kotlin中定義的,他們可能會(huì)使類型協(xié)變
out
以避免這個(gè)problem.)為了繞過(guò)它,可以使用use-site方差使它協(xié)變:協(xié)變意味著您不能從這個(gè)引用修改它的內(nèi)容,這在read-onlyLiveData中已經(jīng)是正確的了。這只是讓編譯器知道。將其標(biāo)記為協(xié)變?cè)试SMutableList類型的up-casting轉(zhuǎn)換為L(zhǎng)ist類型。