如何将 lambda 从 Java 传递给 Kotlin 方法?

Bar*_*man 4 java lambda kotlin

我可以从 Java 调用这个 Kotlin 方法吗?

fun foo(() -> Unit)

如果是这样,语法是什么?

And*_*ilo 8

您需要创建以下实例Function0

foo(new Function0<Unit>() {
    @Override
    public Unit invoke() {
        // Here should be a code you need
        return null;
    }
});
Run Code Online (Sandbox Code Playgroud)

或者如果您使用 Java 8,则可以简化

foo(() -> {
    // Here should be a code you need
    return null;
});
Run Code Online (Sandbox Code Playgroud)


Tod*_*odd 5

您可以调用它,但需要注意返回类型。如果您的 Kotlin 函数返回Unit,Java 将需要返回Unitnull,因为voidUnit.

我的例子有效:

foo(() -> {
    System.out.println("Hi");
    return null;
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您想真正明确Unit...

foo(() -> {
    System.out.println("Hi");
    return Unit.INSTANCE;
});
Run Code Online (Sandbox Code Playgroud)