Android 函数,该函数接受从kotlin中的泛型继承的所有类

Android 函数,该函数接受从kotlin中的泛型继承的所有类,android,generics,kotlin,delegates,Android,Generics,Kotlin,Delegates,我试图通过addDelegate函数将Example类添加到Delegate列表中。不幸的是,我犯了一个错误: TypeMismatch: Required Delegate<Item, CoreHolder> found Example 将Delegate接口类型参数更改为,并将onBind更改为fun onBind(项目:列表,持有者:@UnsafeVariance VH),使代码变为 接口委托{ 游戏绑定(物品:列表,持有者:@unsafevh) } 所有这两个解决方案都可

我试图通过
addDelegate
函数将
Example
类添加到
Delegate
列表中。不幸的是,我犯了一个错误:

TypeMismatch: Required Delegate<Item, CoreHolder> found Example
  • Delegate
    接口类型参数更改为
    ,并将
    onBind
    更改为
    fun onBind(项目:列表,持有者:@UnsafeVariance VH)
    ,使代码变为
  • 接口委托{
    游戏绑定(物品:列表,持有者:@unsafevh)
    }
    
    所有这两个解决方案都可以正常工作,可以按预期运行和运行。但代码并不是那么花哨


    有没有其他更好的方法来解决这类问题?谢谢

    简短-不可能将这些类合并到一个
    DelegateManager
    。该任务可简化为以下内容:

    fun <TKey> someMethod(pair1: Pair1<TKey>, pair2: Pair2<TKey>) {
        val map = mutableMapOf<TKey, ???>()
    
        map[pair1.key] = pair1.value
        map[pair2.key] = pair2.value
    }
    
    class Pair1<TKey>(val key: TKey, val value: String)
    class Pair2<TKey>(val key: TKey, val value: Int)
    

    最后:您不能将
    Example
    Example2
    类放入公共集合,我的代码也是如此。此外,你不能只使用
    delegates谢谢你的帮助,我的坏消息我忘了提到我没有包括所有的代码只是相关的代码。我对t没有任何问题,我唯一的问题是VH。将
    T
    更改为T
    中的
    不会有帮助。@T技术,我是对的,将
    DelegateManager
    替换为
    DelegateManager
    也没有帮助吗?我已经更新了我的帖子,为您提供了更多详细信息和我尝试过的更多代码。你介意再帮我一次吗?感谢遵守守则,
    代表
    !=<代码>委托
    。原因:
    Delegate
    具有签名功能
    fun onBind(项目:List,持有者:CoreHolder)
    ,例如,任何CoreHolder实现者都应该在
    onBind
    中使用。但是
    Delegate
    仅实现
    fun-onBind(项目:列表,持有者:RecyclerView.ViewHolder)
    。例如,
    Delegate
    可以接受另一个视图。视图持有者,但是
    Delegate
    不能。谢谢你的回答,我的坏消息再次出现。我已经更新了这个问题。我上一次迭代中有一个工件:弓:
        @SurpressWarning("UNCHECKED_CAST")
        fun addDelegate(delegate: Delegate<T, out CoreHolder>) {
            delegates.add(delegate as Delegate<T, CoreHolder>)     
        }
    
        interface Delegate <T, out VH: CoreHolder> {
            fun onBind(items: List<T>, holder: @UnsafeVariance VH)
        }
    
    fun <TKey> someMethod(pair1: Pair1<TKey>, pair2: Pair2<TKey>) {
        val map = mutableMapOf<TKey, ???>()
    
        map[pair1.key] = pair1.value
        map[pair2.key] = pair2.value
    }
    
    class Pair1<TKey>(val key: TKey, val value: String)
    class Pair2<TKey>(val key: TKey, val value: Int)
    
    fun <TKey> someMethod(pair1: Pair<TKey, CiImpl1>, pair2: Pair<TKey, CiImpl2>) {
        val map = mutableMapOf<TKey, CommonInterface>()
    
        map[pair1.key] = pair1.value
        map[pair2.key] = pair2.value
    }
    
    class Pair<TKey, TValue: CommonInterface>(val key: TKey, val value: TValue)
    
    class CiImpl1: CommonInterface
    class CiImpl2: CommonInterface
    
    interface CommonInterface