如何通过Lambda为Kotlin类实现函数式接口?
解决方案
你可以利用Kotlin的委托机制结合函数式接口的Lambda转换特性,实现你想要的简洁写法,无需编写方法签名、额外包装类或替换为高阶函数:
class Padded(padding: String) : Decorator by { text -> "$padding $text $padding" }
原理说明
- 函数式接口
Decorator支持直接用Lambda实例化,编译器会自动将Lambda转换为实现该接口的匿名类,Lambda逻辑对应decorate方法的实现。 - 通过
by关键字,将Padded类对Decorator接口的实现委托给这个Lambda生成的实例,省去了手动编写override fun decorate(...)的步骤。
验证示例
fun main() { val padded = Padded("###") println(padded.decorate("Kotlin")) // 输出:### Kotlin ### }
内容的提问来源于stack exchange,提问作者Max Smirnov
相关产品推荐
相关产品推荐

