Kotlin 空安全机制与常用作用域函数总结
Created|Updated
|Word Count:431|Reading Time:1mins|Post Views:
Kotlin 空安全机制与常用作用域函数总结
本文总结了 Kotlin 中用于处理空值(null)的关键工具与语法,包括 !!、?.、?:、let、run、also、apply、takeIf 等。
基础空安全运算符
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 的核心优势之一,掌握它们能大大提升你写代码的安全性与可读性。