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