【发布时间】:2019-04-10 16:59:07
【问题描述】:
我可以从 Java 中调用这个 Kotlin 方法吗?
fun foo(() -> Unit)
如果有,语法是什么?
【问题讨论】:
我可以从 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;
});
【讨论】:
null?本质不会说“预期非空但收到空”吗?
我完全同意安德鲁的回答,有更好的方法来接近
在你的情况下,它看起来像这样:
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;
}
});
【讨论】: