Vert.x Kotlin Type Несоответствие типов Требуется обработчик<AsyncResult <Unit >> (Обработчик<AsyncResult <Unit >>) -> Unit
Ниже приведен метод, переписанный в Kotlin из Java:
fun publishMessageSource(
name: String,
address: String,
completionHandler: Handler<AsyncResult<Unit>>
) {
val record = MessageSource.createRecord(name, address)
publish(record, completionHandler)
}
Однако, когда я называю это следующим образом:
publishMessageSource("market-data", ADDRESS, { record: Handler<AsyncResult<Unit>> ->
if (!record.succeeded()) {
record.cause().printStackTrace()
}
println("Market-Data service published : ${record.succeeded()}")
})
Я получаю ошибку Type Mismatch required Handler<AsyncResult<Unit>> found (Handler<AsyncResult<Unit>>) -> Unit
,
Что я делаю неправильно?
1 ответ
Решение
Ваша лямбда должна принять параметр, который единственный метод Handler
интерфейс принимает, что AsyncResult<Unit>
в этом случае. Ваша лямбда это Handler
так что это не займет Handler
в качестве параметра.
Я думаю, что вам также понадобится явный вызов конструктора SAM, поскольку ваша функция написана на Kotlin, это будет выглядеть примерно так:
publishMessageSource("market-data", ADDRESS, Handler<AsyncResult<Unit>> { record: AsyncResult<Unit> ->
...
})
Это создает Handler<AsyncResult<Unit>>
с лямбда, представляющим его единственный метод.
Наконец, вы можете опустить тип внутри лямбды, чтобы он был менее избыточным:
publishMessageSource("market-data", ADDRESS, Handler<AsyncResult<Unit>> { record ->
...
})