如何将回调函数从 Java 传递给 Kotlin class

How to pass callback function from Java to Kotlin class

我有一个 Kotlin class 如下(这是一个简单的示例,因此 'do' 没有任何用处)

class MyKotlinClass (private val handleSomeCallBack: (ByteArray) -> Unit) {
    private val someBuffer = BytesBuilder()

    fun myFunction(bytesList: List<Byte>) {
        handleSomeCallBack(someBuffer.toArray())
    }
}

我想从 java class 调用此代码,因此,在那个 class 中我声明了以下内容:

public MyJavaClass() {
    messageParser = new MyClass(handleSomeCallback);
}

正在传递的回调方法是:

private void handleSomeCallback(byte[] dataBytes) {

}

(文件中正确声明了 MyClass)

我遇到的问题是我不知道如何将回调传递给 MyKotlinClass 的构造函数。

我尝试了很多方法,包括

messageParser = new MyClass(handleSomeCallback(byte[] dataBytes));

messageParser = new MyClass(this::handleSomeCallback(byte[] dataBytes));

但无论我尝试什么,我都会收到错误消息。

我相信答案与 lambda 有关,但我不太明白从 Java.

调用它的语法应该是什么

你可以这样选择:

MyKotlinClass instance = new MyKotlinClass(byteArray -> {
    // your code
    return Unit.INSTANCE;
});

或使用 Unit 作为您的单独方法的 return 类型,如@ADM

所建议

你只需要添加

compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

到您在应用中的 android 区块 build.gradle