如何将回调函数从Java传递到Kotlin类

时间:2020-09-17 15:13:57

标签: java android kotlin callback

我有一个如下的Kotlin类(这是一个简单的示例,因此它不会“做”任何有用的事情)

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

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

我想从Java类中调用此代码,因此,在该类中我声明了以下内容:

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调用该语法应该是什么。

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

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

或使用Unit作为@ADM here建议的单独方法的返回类型

您只需要添加

compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

进入应用android中的build.gradle区块