【发布时间】:2022-01-23 13:10:04
【问题描述】:
我是 Android 开发的新手。最近我正在学习 Kotlin,我正在尝试找出 setOnClickListener。但是,我在使用 Kotlin 将对象表达式转换为 lambda 的过程中遇到了一个问题。
步骤 1. Java 中的 setOnClickListener:
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// my code
}
});
第 2 步。然后我使用对象表达式将 Java 代码转换为 Kotlin 代码:
buttonLogin.setOnClickListener(object : View.OnClickListener {
override fun onClick(p0: View?) {
// my code
}
})
第 3 步,然后 IntelliJ 提示我将对象表达式转换为 lambda:
buttonLogin.setOnClickListener {
// my code
}
它看起来更简洁,但是,我无法理解第 3 步背后的逻辑。 于是上网查了一些资料,上面写着
任何接收具有单个函数的接口的函数都可以 替换为 lambda
它在 setOnClickListener 上起作用。 但是我还是不能完全理解,所以我定义了一个接口和类来验证一下。
这是我的代码:
interface MyInterface {
fun method1()
}
class MyClass {
fun method2(myInterface: MyInterface) {
myInterface.method1()
}
}
fun main() {
val myClass = MyClass()
myClass.method2(object : MyInterface {
override fun method1() {
println("Hello, world.")
}
})
// So how to write the lambda to replace object expression?
}
【问题讨论】: