我可以从Java调用此Kotlin方法吗?
fun foo(() -> Unit)
如果是这样,语法是什么?
答案 0 :(得分:4)
您可以调用此方法,但需要注意返回类型。如果您的Kotlin函数返回Unit
,则Java将需要返回Unit
或null
,因为void
与Unit
不太相同。>
我的示例有效:
foo(() -> {
System.out.println("Hi");
return null;
});
或者,如果您想对Unit
进行露骨的话...
foo(() -> {
System.out.println("Hi");
return Unit.INSTANCE;
});
答案 1 :(得分:3)
您需要创建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;
});
答案 2 :(得分:0)
我完全同意安德鲁的回答,有更好的方法
就你而言,它看起来像这样:
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;
}
});