0
以下是從Java在科特林重寫的方法:Vert.x科特林類型不匹配所需處理程序<AsyncResult <Unit>>實測值(處理程序<AsyncResult <Unit>>) - >單位
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
。
我在做什麼錯?
真棒,謝謝。有關SAM構造函數的特別有用的信息。這正是我想通過在lambda中指定'record'類型來實現的。我將重新閱讀SAM上的內容。 – amb85
是的,這是一個奇怪的用例。默認情況下,SAM轉換適用於Java接口和Java方法,這些接口只需寫下一個lambda即可使用這些接口,但在該函數位於Kotlin時,在lambda使其可用之前明確寫入接口名稱。現在我想起來了,你可以讓你的函數獲得一個合適的Kotlin函數,然後在其中創建Handler來使這個更加整潔。 – zsmb13
好建議:不太確定爲什麼我沒有想到這一點。我已經去了'resultHandler:(AsyncResult) - > Unit'並把它作爲'Handler >(resultHandler)'傳遞。允許我使用最後一個參數,也是括號內的lambda表達式。我在調用SAM構造函數時無法這麼做 - 是它的一個副作用? –
amb85