Vert.x Kotlin类型不匹配需要处理程序<asyncresult <unit>&gt;找到(处理程序<asyncresult <unit>&gt;) - &gt;单元

时间:2017-06-26 19:40:31

标签: kotlin vert.x java-interop

以下是来自Java的Kotlin重写的方法:

std::vector

但是,当我按如下方式调用它时:

end

我收到错误fun publishMessageSource( name: String, address: String, completionHandler: Handler<AsyncResult<Unit>> ) { val record = MessageSource.createRecord(name, address) publish(record, completionHandler) }

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您的lambda应该采用Handler接口的单个​​方法所采用的参数,在这种情况下为AsyncResult<Unit>。您的lambda Handler,因此它不会将Handler作为参数。

我认为你还需要在这里显式调用SAM构造函数,因为你的函数是用Kotlin编写的,看起来像这样:

publishMessageSource("market-data", ADDRESS, Handler<AsyncResult<Unit>> { record: AsyncResult<Unit>  ->
    ...
})

这将创建一个Handler<AsyncResult<Unit>>,其中lambda表示其单个方法。

最后,您可以省略lambda中的类型,以减少冗余:

publishMessageSource("market-data", ADDRESS, Handler<AsyncResult<Unit>> { record ->
    ...
})