no puede resolver la reference a los methods

Tengo interfaces

interface IIMSIdentifiable { fun setImsId(id : String) fun getImsId() : String } interface IIMSConsumer : IIMSIdentifiable { fun consumeAsync(message : GRLMessage) } 

Y tengo una class que contiene objects con el tipo IIMSConsumer

 class IMSObject<IIMSConsumer> : Thread { constructor(component : IIMSConsumer) { obj = component // IMSContext.instance.registerObject(this) // hm type mismatch } val objectMessageQueue = LinkedBlockingDeque<GRLMessage>() val obj : IIMSConsumer var isRunning = true override fun run() { while(isRunning) { processMessages() } } fun stopProcessing() { isRunning = false } fun processMessages() { objectMessageQueue.forEach { obj.consumeAsync(it) } } fun getObjectId() : String { return obj.getImsId() } } 

Pero no puede resolver las references

 fun processMessages() { objectMessageQueue.forEach { obj.consumeAsync(it) // cannot resolve reference !!! } } fun getObjectId() : String { return obj.getImsId() // cannot resolve reference !!! } 

¿Cuál es el problema? Curiosamente, no pidió importaciones a pesar de estar ubicadas en diferentes packages

 com.lapots.game.journey.ims.domain.IMSObject com.lapots.game.journey.ims.api.IIMSConsumer 

Traté de probar algo más simple y get el mismo error con unresolved reference

 interface IConsumer { fun consume() : String } class Generic<IConsumer>(val consumer : IConsumer) { fun invoke() { print(consumer.consume()) // unresolved reference } } fun main(args: Array<String>) { val consumer = object : IConsumer { override fun consume() : String { return "I consume" } } val generic = Generic<IConsumer>(consumer) generic.invoke() } 

class Generic<IConsumer>(val consumer : IConsumer) {

Está creando un Generic class con un parámetro de tipo genérico llamado IConsumer . Este parámetro de tipo sombreará la interfaz que definió dentro de esa class, por lo que realmente dice es:

class Generic<IConsumer : Any>(val consumer : Any) {

Es por eso que no puede resolver el método, ya que el parámetro genérico solo puede interpretarse como Any .

Para arreglar, cambie el parámetro de tipo para tener los nombres apropiados y enlazados ( class Generic<T : IConsumer>(val consumer : T) { ) o elimine los generics por completo

  • Error al usar un object para implementar una list vacía
  • ¿Asignación de collections anidadas con hibernación de annotations JPA? Mapa <Clave, Establecer <Valores >>
  • Determinar si una instancia es una instancia de una class de datos
  • ¿Cómo get "key" a muchos niños desconocidos en Firebase?
  • Obtenga una date de un DatePickerDialog en Kotlin Android
  • ¿Cómo se verifica el tipo genérico en Kotlin?
  • No se puede convertir la advertencia de "tipo de plataforma de statement" de Kotlin en un error
  • ¿Cómo se ejecuta el método de suspensión a través de la reflexión?
  • Mezcla de Kotlin con error de Java: no se puede encontrar el símbolo
  • ¿Dónde intelliJ pone kotlin.js en un proyecto multiplataforma?
  • Kotlin "fuera" y "en" y generics - uso correcto