无法解析对方法的引用
我有接口
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) {
)或完全删除泛型