无法解析对方法的引用

我有接口

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

而且我有一个包含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() } } 

但它不能解决引用

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

问题是什么? 奇怪的是,它并没有要求进口,尽管位于不同的包装

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

我试图测试一些简单的东西,并得到相同的错误与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) {

您正在创建一个名为IConsumer的通用类型参数类Generic 。 这个类型参数会影响你在这个类中定义的接口,所以你实际上说的是:

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

这就是为什么它不能解决的方法,因为泛型参数只能被解释为Any

要修复更改类型参数以具有适当的名称和绑定( class Generic<T : IConsumer>(val consumer : T) { )或完全删除泛型