MST

星途 面试题库

面试题:Kotlin中函数式接口与SAM转换基础应用

请解释Kotlin中函数式接口的定义,并举例说明如何使用SAM转换来简化代码。例如,假设你有一个定义好的函数式接口 `OnClickListener`,包含一个 `onClick` 方法,如何使用SAM转换来为一个按钮设置点击监听器?
36.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
  1. Kotlin中函数式接口的定义
    • 在Kotlin中,函数式接口是指只包含一个抽象方法的接口(Java中也有类似概念,Java 8引入了@FunctionalInterface注解来标记函数式接口,Kotlin虽无类似注解,但遵循相同原则)。这种接口主要用于支持函数式编程风格,允许将函数作为值传递。
  2. SAM转换(Single - Abstract - Method转换)
    • SAM转换是指在Kotlin中,当需要一个函数式接口的实例时,可以直接传递一个与该接口中唯一抽象方法签名匹配的lambda表达式。Kotlin会自动将这个lambda表达式包装成函数式接口的实例。
  3. 示例:为按钮设置点击监听器: 假设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方法。