Kotlintypes错配。 预期任何收到的MyObject
我正在制作一个可观察的LiveData
对象列表,它应该包含Resource
对象( https://developer.android.com/topic/libraries/architecture/guide.html#addendum )。 我不关心Resource
对象所包含的数据types。
abstract class LiveResources : LiveData<Resource>() { private val mediatorLiveData = MediatorLiveData<Resource>() protected val resources = HashSet<LiveData<Resource>>() fun addResource(source: LiveData<Resource>) { resources.add(source) mediatorLiveData.addSource(source, resourceObserver) } fun removeResource(source: LiveData<Resource>) { resources.remove(source) mediatorLiveData.removeSource(source) } private val resourceObserver = Observer<Resource> { onSourceChange() } abstract fun onSourceChange() }
不幸的是,当我尝试使用LiveResources.addResource()
与LiveData<Resource<List>>
我得到TypeMismatch错误在我的IDE,说LiveData<Resource>
是预期的。
您的资源(和/或LiveData)类应使用通用协方差来定义,以使其工作。 像这样:
class Resource // <- out marks generic type as covariant
还没有尝试过,但我认为这将工作
fun
你应该生成类接受Resource
即LiveData
。 任何对象的协变都是通过的,但是我认为你并没有试图达到这个目的。
另一个友好的建议是,你不需要在MediatorLiveData
之上添加另外一个抽象,这个抽象与你实现的完全一样。