Котлин. Ожидается Любой полученный MyObject

Я делаю список наблюдаемых объектов LiveData , которые должны содержать объект Resource ( https://developer.android.com/topic/libraries/architecture/guide.html#addendum ). Меня не волнует, какой тип данных содержит объект Resource .

 abstract class LiveResources : LiveData<Resource<Any>>() { private val mediatorLiveData = MediatorLiveData<Resource<Any>>() protected val resources = HashSet<LiveData<Resource<Any>>>() fun addResource(source: LiveData<Resource<Any>>) { resources.add(source) mediatorLiveData.addSource(source, resourceObserver) } fun removeResource(source: LiveData<Resource<Any>>) { resources.remove(source) mediatorLiveData.removeSource(source) } private val resourceObserver = Observer<Resource<Any>> { onSourceChange() } abstract fun onSourceChange() } 

К сожалению, когда я пытаюсь использовать LiveResources.addResource() с LiveData<Resource<List<String>>> я получаю ошибку TypeMismatch в моей среде IDE, заявив, что LiveData<Resource<Any>> .

Класс Resource (и / или LiveData) должен быть определен с общей ковариацией, чтобы заставить его работать. Вот так:

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

Не пробовал, но я думаю, что это сработает

fun <T:Any> addResource(source: LiveData<Resource<T>>)

Вы должны генерировать классы для принятия Resource<T> то есть LiveData<Resource<T>> . Any ковариантность любого объекта прошла, но я думаю, что вы не пытаетесь достичь этого.

Другим дружеским советом является то, что вам не нужно добавлять еще одну абстракцию поверх MediatorLiveData которая делает то же самое, что и вы.