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 addResource(source: LiveData>)

你应该生成类接受ResourceLiveData> 。 任何对象的协变都是通过的,但是我认为你并没有试图达到这个目的。

另一个友好的建议是,你不需要在MediatorLiveData之上添加另外一个抽象,这个抽象与你实现的完全一样。