Назначение и извлечение карты типов

Я пытаюсь прокси-вызовов для Observables и LiveData (аналогично шаблону посредника), но я не мог найти решение для типов. Это проблема:

class Proxy { private val backupMap = HashMap<LiveData<Any>, Observer<Any>>() fun <T> add(liveData : LiveData<T>, observer : Observer<T>) { // !This is the issue LiveData<Any> is expected backupMap.put(liveData, observer) } fun attach() { backupMap.forEach { (key, value) -> key.observeForever(value) } } } fun addSome() { Proxy().apply { add(MutableLiveData<String>(), Observer { }) } } 

Я мог бы использовать backupMap.put для backupMap.put(liveData as LiveData<Any>, observer as Observer<Any>) но это вызывает Unchecked Cast .

Решение, которое я нашел, заключается в использовании промежуточного объекта для хранения привязки типов:

 private val backupMap: MutableMap<LiveData<*>, Attacher<*>> private class Attacher<A>(private val lifeData: LiveData<A>, private val observer : Observer<A>) { fun attach() { lifeData.observeForever(observer) } fun detach() { lifeData.removeObserver(observer) } }