[英]Consuming a Kotlin Function with an Argument in a Java file using the correct syntax
我在Kotlin文件中有一个名为onItemSelected
的变量
var onItemSelected: ((String) -> Void)? = null
在Java文件中,我试图设置该变量,但无法找出正确的语法。
lambda 表达式一直想要返回一个 Void,但是,当我返回一个 void 时,它就无法编译。
binding.myCustomView.getOnItemSelected() = (item, Void) -> {
//What should happen here?
Log.i("Test", item);
return;
};
我尝试了各种语法,但我似乎无法正确理解。
使用具有参数的 function 设置变量的正确方法是什么?
在 Kotlin 中,不返回值的函数应该返回Unit
,而不是java.lang.Void
。 事实上,在 Java 中也是如此——在 Java 中你应该返回void
,而不是java.lang.Void
。
因此将 Kotlin 代码更改为:
var onItemSelected: ((String) -> Unit)? = null
现在在 Java 代码中,您需要返回kotlin.Unit.INSTANCE
,因为这是存在的唯一Unit
实例( Unit
被声明为object
)。 如果您在 Kotlin 中执行此操作,则返回Unit.INSTANCE
是隐式的,但您需要在 Java 中显式执行此操作。
import kotlin.Unit;
// ...
binding.setOnItemSelected(item -> {
System.out.println(item);
// do your thing with item...
return Unit.INSTANCE;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.