无法解析方法的引用

时间:2016-09-18 13:40:41

标签: kotlin

我有接口

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    let redCalloutView = RedCalloutView(view.annotation)
    view.addSubview(redCalloutView)
}

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
    view.subviews.forEach {
        if $0 is RedCalloutView {
            $0.removeFromSuperview()
        }
    }
}

我有一个包含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

1 个答案:

答案 0 :(得分:2)

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

您正在使用名为Generic的泛型类型参数创建一个类IConsumer。此类型参数将影响您在该类中定义的接口,因此实际上它是:

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

这就是无法解析方法的原因,因为泛型参数只能解释为Any

要修复,请更改type参数以使其具有相应的名称并绑定(class Generic<T : IConsumer>(val consumer : T) {)或完全删除泛型