我有这种情况,我有一个超级抽象类,它使用 Kotlin 发出不同类型的事件sealed classes
。
这些事件建模如下。
sealed class BaseEvent {
object ConnectionStarted : BaseEvent()
object ConnectionStopped : BaseEvent()
}
sealed class LegacyEvent : BaseEvent() {
object TextChanged : LegacyEvent()
object TextCleared : LegacyEvent()
}
sealed class AdvancedEvent : BaseEvent() {
object ButtonClick : AdvancedEvent()
object ButtonLongClick : AdvancedEvent()
}
这是发出这些事件的类
abstract class BaseViewModel<E : BaseEvent> {
private fun startConnection() {
emit(BaseEvent.ConnectionStarted) // <-- Error
}
fun emit(event: E){
//...
}
}
class LegacyBaskan : BaseViewModel<LegacyEvent>() {
fun textChanged() {
emit(LegacyEvent.TextChanged) // <-- Works
}
}
class AdvancedBaskan : BaseViewModel<AdvancedEvent>() {
fun buttonClicked() {
emit(AdvancedEvent.ButtonClick) // <-- Works
}
}
在这里,它只适用于子类,我可以在它们LegacyEvent
或AdvancedEvent
它们的关联类中发出任何事件。但是,对于BaseBaskan
该类,我不能从 中发出事件,BaseEvent
尽管我声明泛型类型E
必须扩展BaseEvent
.
我需要每个子类都可以访问自己的事件以及超类事件,但不能访问其他子类的事件。
我怎样才能仍然从BaseEvent
基类中发出事件,同时让每个类只能发出自己的事件?