当前位置: 首页 > 知识库问答 >
问题:

使用正确的语法在Java文件中使用参数的静态编程语言函数

盖锐
2023-03-14

我在一个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;
    };

我尝试了各种语法,但似乎无法正确。

使用具有参数的函数设置变量的正确方法是什么?

共有1个答案

鲜于峰
2023-03-14

在静态编程语言中,不返回值的函数应该返回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