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>是预期的。

3 Solutions collect form web for “Kotlintypes错配。 预期任何收到的MyObject”

您的资源(和/或LiveData)类应使用通用协方差来定义,以使其工作。 像这样:

 class Resource // < - out marks generic type as covariant 

还没有尝试过,但我认为这将工作

fun addResource(source: LiveData>)

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

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

  • 如何将函数输出转换为Kotlin单元
  • 如何得到/放Kotlin内地图或地图的地图
  • 如何在Kotlin中创建一个无限长的序列
  • 数据列表没有显示在Android应用程序的主要活动的回收站视图中,使用kotlin进行开发。
  • Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()
  • 只计算一次属性
  • 选项链接而不是if / else
  • 用Swift编写Android应用程序
  • 为什么专家将MutableList更改为List?
  • 我怎样才能使用回报,而不是让Kotlin?
  • 使用Parcelable时,Kotlin编译错误
  • Kotlin language will be the best programming language for Android.