Kotlin: método no puede ser utilizado con generics

Como la otra cara de esto:

interface PacketDecoder<out T : Packet> : PacketTranscoder { fun decode(client: Client, buf: ByteBuf): T } 

Estoy tratando de usar esto:

 interface PacketEncoder<in T : Packet> : PacketTranscoder { fun encode(packet: T, buf: ByteBuf) } 

Aunque PacketDecoder parece funcionar bien, no puedo referirme al método de encode(T, ByteBuf) . El autocompletado de IntelliJ IDEA ni siquiera lo muestra como una opción y la escritura manual resulta en un error de reference no resuelto.

Para evitarlo, actualmente estoy usando este truco, pero no creo que esta sea la forma correcta de hacerlo.

 fun <P : T> encode(packet: P, buf: ByteBuf) 

La razón por la que no funcionó es porque me refería a un valor HashMap<KClass<*>, PacketEncoder<*>>() tanto, Kotlin no pudo generar la firma del método de encode ya que * no es una firma genérica válida (¿Alguien podría confirmar?).

Este es mi código resultante, tuve que usar un elenco sin PacketEncoder<T> para PacketEncoder<T> :

 fun <T : Packet> encode(packet: T, buf: ByteBuf) { val encoder = (encoders[packet.javaClass.kotlin] ?: return) as PacketEncoder<T> buf.writeByte(encoder.id) encoder.encode(packet, buf) } 
  • SDK de Firebase en Kotlin - onChildChanged no dispara al primer hijo en la list
  • ¿Cómo implementar la function genérica de Interface en Kotlin?
  • Actualizado a Android Studio 3.0. Obteniendo un error "Kotlin no configurado"
  • ¿Usar EventBus para finalizar una actividad de la actividad base?
  • Fábrica configurable en Kotlin para JavaScript
  • WeakReference no funciona en Kotlin
  • IllegalStateException: parcel.readString () no debe ser nulo
  • Anotación de la invalidation de fuente Java generada (para Kotlin)
  • Fragmento: Visibilidad relativa de la presentación no modificable en OnCreateView
  • no puede generar carpetas de vista java.lang.IndexOutOfBoundsException
  • Cómo pasar la interfaz en mi adaptador Kotlin RecylerView y recibir una callback en la actividad de Kotlin