kotlinのコールバックブロック付きのメソッドをJavaコードから実行する時には、下記のようにする必要があった。
下記のような場合、Java側で
return Unit.INSTANCE;
がないとコンパイルエラーだが、
「ラムだ式の戻り値の型が不整合です」と言われるだけで、どうやればよいか悩んだので、投稿。
kotlin
class KotlinClass {
fun loadItems(itemIds: List<String>,
complete: (isSuccess: Boolean, itemList: List<Item>) -> Unit) {
/* 何かしらの処理 */
complete(true, itemList)
}
}
java(呼び出し側)
kotlinClass.loadItems(itemIds, (isSuccess, items) -> {
/* 何かしらの処理 */
//注意:最後に Unit.INSTANCE を返す必要がある
return Unit.INSTANCE;
})
理由
kotlinでは、メソッドの戻り値がないときも、実際は、return Unit を省略しているという扱いになっていて、Javaでそれと互換性を保つために return Unit.INSTANCE; しないとならないらしい。