Invocar methods en interfaces con generics

La siguiente es una ilustración muy simple de lo que estoy tratando de hacer:

interface Event { fun value(): Int } class Event1: Event { override fun value() = 1 } class Event2: Event { override fun value() = 2 } interface EventConsumer<T> where T: Event { fun consume(event: T) } class Event1Consumer: EventConsumer<Event1> { override fun consume(event: Event1) { println(event.value()) } } class Event2Consumer: EventConsumer<Event2> { override fun consume(event: Event2) { println(event.value()) } } class EventManager { private val consumers: Map<KClass<*>, EventConsumer<*>> = mapOf( Event1::class to Event1Consumer(), Event2::class to Event2Consumer() ) fun consume(event: Event) { val consumer = consumers[event::class] consumer?.consume(event) } } 

La llamada al método final (consumer.consume ()) me está dando un error de compilation

Tipo fuera de proyecto 'EventConsumer <*>?' prohíbe el uso de 'consumo de diversión abstracta pública (evento: T): Unidad definida en EventConsumer'

Sé que Kotlin es mucho más estricto con respecto a los generics que con Java, que probablemente sea la razón por la que no funciona, pero ¿cómo implementaría algo como esto correctamente?