Kotlin 空安全机制与常用作用域函数总结

本文总结了 Kotlin 中用于处理空值(null)的关键工具与语法,包括 !!?.?:letrunalsoapplytakeIf 等。

基础空安全运算符

1. 安全调用(?.)

用于在对象可能为 null 的情况下调用方法/属性,不会抛出异常。

1
val length = name?.length

2. Elvis 运算符(?:,提供默认值)

如果左边为 null,则使用右边的值。

1
val displayName = name ?: "访客"

3. 非空断言(!!)

如果变量为 null,则抛出 NullPointerException

1
val length = name!!.length

常用作用域函数对比(let / run / also / apply)

函数 接收者类型 返回值 用途
let it 最后一行 处理非空逻辑或链式调用
run this 最后一行 对同一个对象做多步操作
also it 原对象本身 用于调试打印、日志、辅助操作
apply this 原对象本身 多用于初始化对象属性

let

1
2
3
name?.let {
println("名字长度:${it.length}")
}

run

1
2
3
4
val result = config?.run {
println(version)
computeValue()
}

also

1
2
3
val user = User("Tom").also {
println("创建了用户:${it.name}")
}

apply

1
2
3
4
val paint = Paint().apply {
color = Color.RED
strokeWidth = 2f
}

takeIf 和 takeUnless

takeIf:满足条件时返回对象,否则返回 null

1
2
val input = "Hello"
val valid = input.takeIf { it.length > 3 }

takeUnless:不满足条件时返回对象

1
val result = user.takeUnless { it.isBanned }

推荐写法小结

目的 推荐方式
避免空指针 使用 ?.?: 替代 !!
非空再执行操作 someVar?.let { ... }
初始化对象 apply
链式调试 also
条件过滤 takeIf / takeUnless

这些写法是 Kotlin 区别于 Java 的核心优势之一,掌握它们能大大提升你写代码的安全性与可读性。