在不修改原类代码的情况下,为已有的类添加新方法。
fun String.isNumeric(): Boolean {
return this.all { it.isDigit() }
}
println("12345".isNumeric()) // 输出: true
println("123a5".isNumeric()) // 输出: falseAndroid 开发中常用的 “Toast.makeText(…).show()” 经常被封装为 “context.toast(“消息”)”,就是通过扩展函数实现的。
2. 作用域函数 (Scope Functions)
Kotlin 提供了 5 个作用域函数:let, run, with, apply, also。它们的作用是将对象限定在一个代码块内执行操作。
如何区分它们?看两点:上下文对象是谁(this 还是 it),以及返回值是什么(对象本身还是 Lambda 结果)。
① let —— 最常用,常与 ?. 配合处理非空逻辑
• 上下文:it
• 返回值:Lambda 结果
val name: String? = "Null猫"
name?.let {
println(it.length)
}② apply —— 适合对象的初始化配置
• 上下文:this(可以省略)
• 返回值:对象本身
val person = Person("Null猫", 18).apply {
age = 19
}
// person 的 age 已经被修改为 19③ also —— 适合做一些额外的操作(如打印日志)
• 上下文:it
• 返回值:对象本身
val numbers = mutableListOf(1, 2, 3).also {
println("添加元素前的集合: $it")
}④ run —— apply 和 let 的结合体
• 上下文:this
• 返回值:Lambda 结果
val result = person.run {
age = 20
"修改后的年龄是 $age"
}⑤ with —— 非扩展函数,用于减少对象名的重复书写
• 上下文:this
• 返回值:Lambda 结果
val person = Person("Null猫", 18)
with(person) {
println(name)
println(age)
}系列总结
这 10 篇文章覆盖了 Kotlin 从基础语法到进阶特性的核心内容。掌握这些,无论是写 Android 应用、后端服务(Spring Boot 完美支持 Kotlin),还是写点自动化工具,都已经绰绰有余。
评论交流
欢迎留下你的想法