面试题答案
一键面试- Kotlin中函数式接口的定义:
- 在Kotlin中,函数式接口是指只包含一个抽象方法的接口(Java中也有类似概念,Java 8引入了
@FunctionalInterface
注解来标记函数式接口,Kotlin虽无类似注解,但遵循相同原则)。这种接口主要用于支持函数式编程风格,允许将函数作为值传递。
- 在Kotlin中,函数式接口是指只包含一个抽象方法的接口(Java中也有类似概念,Java 8引入了
- SAM转换(Single - Abstract - Method转换):
- SAM转换是指在Kotlin中,当需要一个函数式接口的实例时,可以直接传递一个与该接口中唯一抽象方法签名匹配的lambda表达式。Kotlin会自动将这个lambda表达式包装成函数式接口的实例。
- 示例:为按钮设置点击监听器:
假设
OnClickListener
接口定义如下(通常在Android开发中类似接口已预定义):
interface OnClickListener {
fun onClick()
}
假设存在一个Button
类(在Android中实际存在),有一个setOnClickListener
方法用于设置点击监听器:
class Button {
fun setOnClickListener(listener: OnClickListener) {
// 实际处理点击逻辑的地方,这里简单示意
listener.onClick()
}
}
使用SAM转换为按钮设置点击监听器的代码如下:
fun main() {
val button = Button()
button.setOnClickListener {
println("Button clicked!")
}
}
在上述代码中,{ println("Button clicked!") }
这个lambda表达式与OnClickListener
接口中的onClick
方法签名匹配,通过SAM转换,它被自动包装成了OnClickListener
接口的实例传递给了setOnClickListener
方法。