LiveData <List <Child >>不是LiveData <List <Parent >>的子类

时间:2019-10-17 17:39:29

标签: android kotlin

我有一个抽象的ViewModel类,我们称之为AbstractListViewModel。 它具有一个类型为MutableLiveData 的itemsList。 JSONObject有2个子级:JSONChildOne和JSONChildTwo。我想重写AbstractViewModel子级中的属性以键入MutableLiveData >。

我试图在子类中重写MutableLiveData >

AbstractListViewModel:

abstract val itemsList : MutableLiveData<List<JSONObject>>

ChildOneListViewModel:

override val itemsList =  MutableLiveData<List<JSONChildOne>>()

属性类型为“ MutableLiveData <列表>”,它不是替代的子类型

1 个答案:

答案 0 :(得分:0)

您不能这样做,List<Child>不会扩展List<Parent>(有关原因的讨论,请参见here)。

您应该在AbstractViewModel中使用通用参数,例如:

abstract class AbstractViewModel<T: JSONObject> {
    abstract val itemsList : MutableLiveData<List<T>>
}

class ChildOneListViewModel : AbstractViewModel<JSONChildOne> {
    override val itemsList : MutableLiveData<List<JSONChildOne>>
}