类型安全的地图分配和检索

我正在尝试代理呼叫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.putbackupMap.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) } } 
Interesting Posts