Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 从对象回调到短形式lambda表达式_Kotlin - Fatal编程技术网

Kotlin 从对象回调到短形式lambda表达式

Kotlin 从对象回调到短形式lambda表达式,kotlin,Kotlin,我注意到两个onFocusChangeListener回调实现了相同的功能: editTextPassword.setOnFocusChangeListener { view, hasFocus -> if (!hasFocus) validatePassword() } editTextPassword.setOnFocusChangeListener(object : View.OnFocusChangeListener { override fun onFocusC

我注意到两个onFocusChangeListener回调实现了相同的功能:

editTextPassword.setOnFocusChangeListener { view, hasFocus ->
    if (!hasFocus) validatePassword()
}

editTextPassword.setOnFocusChangeListener(object : View.OnFocusChangeListener {
    override fun onFocusChange(p0: View?, p1: Boolean) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
})
第一个较短,大多数Kotlin开发人员可能会一直使用它。从Kotlin文档中我不清楚如何从长的到短的。有人能解释一下吗

即使文档没有明确地声明它,它似乎在说一个对象表达式相当于一个“函数类型”(也称为lambda表达式)。我不知道这两者之间有什么关系。

这是一个Java,它允许您使用lambda表达式来简化单个方法接口的实现


显式使用对象表达式时只有一个功能上的区别,即您可以引用它(使用
this
),这在lambda中是不可能的。

这是否意味着如果Java接口有多个方法,您不能使用简写方法?@AndroidDev SAM转换仅在调用使用只有1个方法的Java接口的Java方法时有效。如果您知道“SAM”代表“Single Abstract method”,那么很清楚为什么它不适用于具有两个或更多抽象方法的接口…:-)