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

问题描述:

我正在尝试代理Observable和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) 
     } 
    }