【发布时间】:2019-08-17 20:03:51
【问题描述】:
我遇到了一个问题,希望得到您对此的反馈,尤其是如何正确处理以下情况:
我有一个定义委托的抽象类:
abstract class Delegate<T: Any> {
abstract fun bindData(item: T?)
}
然后我有这个委托的 2 个实现:
class DelegateForObjectA: Delegate<A>() {
var data: A? = null
override fun bindData(item: A?){
data = item
}
}
class DelegateForObjectB: Delegate<B>() {
var data: B? = null
override fun bindData(item: B?) {
data = item
}
}
我希望能够在这 2 个代表之间动态切换,这意味着在我的活动中我有:
lateinit var delegate: ActionButtonsViewDelegate<*>
private var delegateA by lazy { DelegateForObjectA() }
private var delegateB by lazy { DelegateForObjectB() }
init {
delegate = delegateA
}
然后:
fun SwitchDelegateAndBindData(item: Any?) {
if (item is B) {
delegate = delegateB
} else {
delegate = delegateA
}
delegate.bindData(item)
}
我尝试通过输入/输出来实现这一点,但没有成功!如何声明我的委托属性以接受两个委托而不会在类型上发生冲突?
【问题讨论】:
-
A和B这里是实际的类名,还是参数?如果它们是实际的类名,那么你不需要用它们参数化你的子类:DelegateForObjectA : Delegate<A>,而不是DelegateForObjectA<A> : Delegate<A>。 (不确定这是否会影响主要问题。) -
显示什么错误?