当前位置: 首页 > 面试题库 >

Latda在Kotlin接口上的表达式

丰佐
2023-03-14
问题内容

我正在将Java中的项目转换为Kotlin,而令我惊讶的是,该接口使Kotlin中的代码比Java中的代码重。

示例 :我想从MyFragment在MainActivity中设置onBackPressListener。

文件1:MainActivity,文件2:MyFragment,文件3:OnBackPressedListener(接口)

Java中的文件1,Kotlin中的文件2,Java中的文件3:

activity.setOnBackPressed { /* Do something */ }

Kotlin中的文件1,Kotlin中的文件2,Java中的文件3:

activity.setOnBackPressed(OnBackPressedListener { /* Do something */ })

Kotlin中的文件1,Kotlin中的文件2,Kotlin中的文件3:

activity.setOnBackPressed(object: OnBackPressedListener {
            override fun onBackPressed() {
                /* Do something */
            }
        })

是否可以在Kotlin中拥有3个文件并使用lambda设置侦听器?(要在Kotlin中获取更多代码,这真令人沮丧。)

谢谢


问题答案:

Lambda版本仅在Kotlin与Java互操作时才有效,因为SAM Conversions请参阅官方文档。

另请注意,此功能仅适用于Java互操作。由于Kotlin具有适当的功能类型,因此不需要将功能自动转换为Kotlin接口的实现,因此不受支持。

因此,如果要使用lambda设置纯kotlin侦听器,则可以定义如下的listenerand setOnBackPressed方法:

var listener: (() -> Unit)? = null

fun setOnBackPressed(l: () -> Unit) {
    listener = l
}

然后通过以下方式调用它:

listener?.invoke()


 类似资料:
  • 主要内容:实例,实例,函数重写,实例Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现: interface MyInterface { fun bar() // 未实现 fun foo() { //已实现 // 可选的方法体 println("foo") } } 实现接口 一个类或者对象可以实现一个或多个接口。 class Child : MyInterface { overri

  • Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现:interface MyInterface { fun bar() // 未实现 fun foo() { //已实现 // 可选的方法体 println("foo") } } 实现接口 一个类或者对象可以实现一个或多个接口。class Child : MyInterface { override

  • 用Java 8 lambdas到处乱搞。为什么当我向接口添加另一个方法时,这会给我一个错误: 不使用第二个方法也能正常工作:“public int getID(String name)

  • 问题内容: Java 8引入了Lambda表达式和类型注释。 使用类型注释,可以定义Java注释,如下所示: 然后可以在任何类型引用上使用此注释,例如: 这是一个完整的示例,使用此批注打印“ Hello World”: 输出将是: 在Java 8中,还可以用lambda表达式替换此示例中的匿名类: 但是由于编译器会推断lambda表达式的Consumer类型参数,因此不再能够注释创建的Consum

  • Java8同时引入了Lambda表达式和类型注释。 可以将lambda表达式强制转换为使用者,然后注释强制转换表达式的类型引用: 但这不会产生所需的结果,因为创建的使用者类不会用强制转换表达式的批注进行批注。产出: 两个问题: 但是注释参数对lambda表达式不起作用: 有趣的是,当使用lambda表达式时,也不可能接收参数的名称(当使用javac-parameter编译时)。不过,我不确定这种行

  • 问题内容: 相当于kotlin中的代码,我尝试执行的操作似乎无效: 在里面: 问题答案: 如果是Java,则可以使用SAM转换: 否则,如果界面是Kotlin … …您可以使用语法匿名实现它: