Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > kotlin Lambda 闭包

解析kotlin中什么是Lambda 闭包

作者:泽胜_Jacques

Kotlin通过Lambda闭包将代码封装为可传递的数据块,替代Java的匿名内部类,提升代码灵活性与可读性,其语法简洁,能捕获外部变量,实现高阶函数功能,简化回调逻辑,本文给大家介绍kotlin中什么是Lambda 闭包,感谢兴趣的朋友跟随小编一起看看吧

在 Kotlin 中,Lambda 闭包的本质是「将一段代码作为数据传递」

通俗类比
把 Lambda 比作「任务便签」:

// 定义一个需要 Lambda 作为参数的函数(同事)
fun buyCoffee(action: () -> Unit) { 
    println("开始买咖啡...")
    action() // 执行便签上的代码(按需求操作)
}
// 创建便签(Lambda):冰美式去糖
val iceAmericano = { println("加冰,去糖,美式咖啡") }
// 传递便签给同事
buyCoffee(iceAmericano) // 输出:开始买咖啡... 加冰,去糖,美式咖啡

关键特性

  1. 语法简洁

    • 用 { } 包裹代码块,参数可选(如 { name: String -> println(name) }),无参数时可省略箭头 ->

// 传统写法
list.forEach({ item -> println(item) })
// 简化写法(更常用)
list.forEach() { item -> println(item) }

Lambda 可以访问其外部作用域的变量(如函数内的局部变量),且会「捕获」这些变量(即使外部函数执行完毕,Lambda 仍可使用这些变量)。例如:

fun makeGreeting(name: String) {
  val age = 18 // 局部变量被 Lambda 捕获
  val greet = { println("Hello, $name! You are $age years old.") }
  greet() // 输出:Hello, Tom! You are 18 years old.
}
  1. 编译原理
    Lambda 本质是函数对象(实现 FunctionN 接口,N 为参数个数)。例如无参数的 Lambda 对应 Function0,一个参数的对应 Function1。当参数超过 22 个时,需手动声明 FunctionN 接口(如文档中通过 Java 定义 Function23)。

为什么不用匿名内部类?
Java 的匿名内部类需显式实现接口(如 Runnable),代码冗长,且无法捕获可变变量(需用 final 修饰)。Lambda 通过语法糖简化了这一过程,让「传递代码」更自然,符合「少写模板代码」的设计原则。

到此这篇关于kotlin中什么是Lambda 闭包的文章就介绍到这了,更多相关kotlin Lambda 闭包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文