簡體   English   中英

如何將 lambda 從 Java 傳遞給 Kotlin 方法?

[英]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 將需要返回Unitnull ,因為voidUnit不太一樣。

我的例子有效:

foo(() -> {
    System.out.println("Hi");
    return null;
});

或者,如果您想真正明確地了解Unit ...

foo(() -> {
    System.out.println("Hi");
    return Unit.INSTANCE;
});

我完全同意安德魯的回答,有更好的方法來處理

  1. 您需要查看生成的 Kotlin Bytecode -> 反編譯它

在您的情況下,它看起來像這樣:

   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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM