我正在将 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 的监听器,你可以像这样定义你的 listener
和 setOnBackPressed
方法:
var listener: (() -> Unit)? = null
fun setOnBackPressed(l: () -> Unit) {
listener = l
}
然后调用它:
listener?.invoke()
关于java - Kotlin 接口(interface)上的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855192/