【发布时间】:2021-05-05 16:57:09
【问题描述】:
我开始学习 Kotlin 不久。
关于在 Android 侦听器中传递 lambda 表达式的部分我不理解。
在 JAVA 中
botton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
我理解这段代码。
我理解这段代码。一个匿名对象被创建并作为setOnClickListener的参数传递。
在 Kotlin 中
button.setOnClickListener(object: View.OnClickListener {
override fun onClick(p0: View?) {
TODO("Not yet implemented")
}
})
我也理解这段代码。我理解它,因为它是一种创建类似于 Java 的匿名对象的方法。
但是
在 Kotlin 的拉姆达中
button?.setOnClickListener { }
我不明白这段代码是如何工作的。
此处表达的 lambda 应作为 setOnClickListener 的参数传递。
onClick()是OnClickListener接口的实现函数,怎么可能传给setOnClickListener?
我不太明白。
setOnClickListener 不是应该传递的OnClickListener 接口object 吗?
【问题讨论】:
-
你看懂Java代码
button.setOnClickListener(v -> {})吗? -
嗯,大致了解
-
我认为您的 Kotlin 代码可以有效地做同样的事情。唯一的区别是您可以去掉括号,并且不必命名
onClick方法的单个参数。 -
你应该看看这里的 lambda 文档:kotlinlang.org/docs/lambdas.html。尤其要注意 trailing lambdas 和 it 部分。