[英]How do I pass a lambda from Java to a Kotlin method?
我可以從 Java 調用這個 Kotlin 方法嗎?
fun foo(() -> Unit)
如果是這樣,語法是什么?
您需要創建Function0
實例:
foo(new Function0<Unit>() {
@Override
public Unit invoke() {
// Here should be a code you need
return null;
}
});
或者如果您使用 Java 8,則可以簡化
foo(() -> {
// Here should be a code you need
return null;
});
您可以調用它,但需要注意返回類型。 如果您的 Kotlin 函數返回一個Unit
,Java 將需要返回Unit
或null
,因為void
與Unit
不太一樣。
我的例子有效:
foo(() -> {
System.out.println("Hi");
return null;
});
或者,如果您想真正明確地了解Unit
...
foo(() -> {
System.out.println("Hi");
return Unit.INSTANCE;
});
我完全同意安德魯的回答,有更好的方法來處理
在您的情況下,它看起來像這樣:
public static final void foo(@NotNull Function0 acceptLambda) {
Intrinsics.checkNotNullParameter(acceptLambda, "acceptLambda");
}
現在你知道為了從 Java 中調用這個函數,你需要像這樣創建 Function0 的實例
foo(new Function0<Unit>() {
@Override
public Unit invoke() {
// Your Code
return null;
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.