如何将回调函数从 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
我有一个 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