Assume we have a Adapter interface:
interface EventAdapter<E : Event> {
val event: E
// ...
}
And a few implementations:
inline class MessageCreateAdapter(override val event: MessageCreateEvent) : EventAdapter<MessageCreateEvent> { /* ... */ }
inline class MessageUpdateAdapter(override val event: MessageUpdateEvent) : EventAdapter<MessageUpdateEvent> { /* ... */ }
// ...
And we create an extension to the Event to get respective Adapters:
fun <E : Event> E.toAdapter(): EventAdapter<E>? {
return when (this) {
is MessageCreateEvent -> MessageCreateAdapter(this)
is MessageUpdateEvent -> MessageUpdateAdapter(this)
else -> null
}
}
Then the compiler complaints that the MessageCreateAdapter and MessageUpdateAdapter are not EventAdapter<E>?. I cannot figure out what's the problem, or the case where this does not hold.
