0
次は、JavaからKotlinに書き換え方法である。しかしVert.x Kotlin種類の不一致は、ハンドラを必要と<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コンストラクタに関する特に有用な情報それは私がラムダの 'record'の型を指定することで達成しようとしていたものです。私はSAM上のものを再読するつもりです。 – amb85
ええ、これはちょっと変わったユースケースです。デフォルトでは、SAM変換は、ラムダを書き留めるだけでこれらのインタフェースをとるJavaインタフェースとJavaメソッドに対して機能しますが、関数がKotlinにあるときにラムダがこの場合でも使用できるようにする前にインタフェースの名前を明示的に記述します。これを考えると、関数を適切なKotlin関数にしてから、この内部を処理するためにHandlerを作成することができます。 – zsmb13
良い提案:私はそれを考えなかった理由はあまり確かではありません。私は 'resultHandler:(AsyncResult) - > Unit'に行き、' Handler >(resultHandler) 'として渡しました。最後のパラメータを大括弧表記の外側のラムダでも使用できるようにします。私はSAMコンストラクタを呼び出すときにそれを行うことができませんでした - その副作用の1つですか? –
amb85