我有一个如下的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调用该语法应该是什么。
答案 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
区块