gpt4 book ai didi

java - Kotlin 接口(interface)上的 lambda 表达式

转载 作者:IT老高 更新时间:2023-10-28 13:46:56 27 4
gpt4 key购买 nike

我正在将 Java 中的项目转换为 Kotlin,我很惊讶接口(interface)使 Kotlin 中的代码比 Java 中的代码更重。

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

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

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 转换,请参阅 the official documents .

Also note that this feature works only for Java interop; since Kotlin has proper function types, automatic conversion of functions into implementations of Kotlin interfaces is unnecessary and therefore unsupported.

所以如果你想使用 lambda 来设置纯 kotlin 的监听器,你可以像这样定义你的 listenersetOnBackPressed 方法:

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

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

然后调用它:

listener?.invoke()

关于java - Kotlin 接口(interface)上的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com