我有接口
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
答案 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) {
)或完全删除泛型