У меня возникла проблема, и я хотел бы получить ваши отзывы об этом, особенно о том, как правильно обработать следующий случай:
У меня есть абстрактный класс, который определяет делегата:
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
}
}
Я хочу иметь возможность переключаться между этими двумя делегатами на лету, что означает, что в моей деятельности у меня есть:
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)
}
Я пытался добиться этого с помощью входа / выхода, но безуспешно! Как я могу объявить свое свойство делегата для принятия обоих делегатов, не конфликтуя с типом?