我在一个Kotlin文件中有一个名为“onitmselected”的变量
var onItemSelected: ((String) -> Void)? = null
在Java文件中,我试图设置该变量,但无法找出正确的语法。
lambda表达式一直希望返回Void,但是,当我返回Void时,它就不会编译。
binding.myCustomView.getOnItemSelected() = (item, Void) -> {
//What should happen here?
Log.i("Test", item);
return;
};
我尝试了各种语法,但似乎无法正确。
使用具有参数的函数设置变量的正确方法是什么?
在静态编程语言中,不返回值的函数应该返回Unit
,而不是java.lang.Void
。事实上,Java也是如此——Java你应该返回val
,而不是java.lang.Void
。
所以将静态编程语言代码更改为:
var onItemSelected: ((String) -> Unit)? = null
现在在Java代码中,需要返回kotlin。单元实例,因为这是存在的唯一一个单元实例(单元被声明为对象)。返回<代码>单位。如果在Kotlin中执行此操作,则实例
是隐式的,但需要在Java中显式执行此操作。
import kotlin.Unit;
// ...
binding.setOnItemSelected(item -> {
System.out.println(item);
// do your thing with item...
return Unit.INSTANCE;
});
我在kotlin文件中定义了这个函数。 想这样从Java调用它 随着 但它给了我 我意识到lambda函数的参数似乎是< code >列表 如果我把类转换成java,我可以很容易地用lambda回调函数调用那个函数。 我做错了什么
我知道内联函数可能会提高性能 编译器可以发出以下代码,而不是为参数创建函数对象并生成调用。(来源) 但是我发现没有kotlin为一个非内联函数创建的函数对象。为什么?
我正在尝试用Java编写下面用Kotlin编写的代码。我无法创建DefaultElementsAdapter,因为我无法获得正确的语法。 我无法获得正确的Java代码 Kotlin班是这样的 我正在尝试使用图书馆https://github.com/m7mdra/HtmlRecycler
这个例子来自我正在学习的一门Kotlin课程: 如果我喜欢使用这样的主构造函数: 在这种情况下,我必须如何编写getter/setter?
编译时得到这个错误 意外标记(使用;分隔同一行的表达式) 柯特林 lambda 函数语法是否与 Java Lambda 表达式略有不同?
我想为我的游戏创建一个简单的倒计时,当游戏开始时,我想每秒调用这个函数: 我试过这个: 但应用程序不幸停止,第二次调用run函数 3周前,我刚刚开始使用android开发和静态编程语言,到目前为止,我对它了解最多。 在Xcode中使用swift时,我使用了这一行,我认为类似的东西也适用于Kotlin