Published 2025-05-12
Null Safety in Kotlin
Kotlin 空安全(Null Safety)教程
Kotlin 通过内置的空安全机制,有效避免了 Java 中常见的空指针异常(NullPointerException,NPE)。本教程将介绍 Kotlin 的空安全特性,包括可空类型、非空断言、Elvis 操作符等。
1. 可空类型(Nullable Types)
在 Kotlin 中,类型默认是非空的。如果需要声明一个变量可以为 null,需要在类型后加上 ?
:
var name: String = "Kotlin"
// name = null // 编译错误
var nullableName: String? = "Kotlin"
nullableName = null // 合法
2. 安全调用操作符(?.)
安全调用操作符 ?.
用于在对象可能为 null 时安全地访问其属性或方法:
val length: Int? = nullableName?.length
如果 nullableName
为 null,表达式结果为 null,否则返回 length
。
3. Elvis 操作符(?:)
Elvis 操作符用于在左侧为 null 时提供默认值:
val lengthOrZero: Int = nullableName?.length ?: 0
如果 nullableName
为 null,则 lengthOrZero
为 0。
4. 非空断言操作符(!!)
非空断言操作符 !!
会抛出空指针异常,如果变量为 null:
val length: Int = nullableName!!.length // 如果为 null 会抛出 NPE
一般不推荐使用,除非你非常确定变量不为 null。
5. let 函数
let
函数常与安全调用操作符一起使用,便于在变量不为 null 时执行某些操作:
nullableName?.let {
println("长度为:${it.length}")
}
6. 智能类型转换(Smart Casts)
Kotlin 编译器会自动判断变量是否为 null,从而进行智能类型转换:
if (nullableName != null) {
// 这里 nullableName 自动被当作非空类型 String
println(nullableName.length)
}
7. 总结
Kotlin 的空安全特性极大地减少了空指针异常的发生。建议优先使用非空类型,只有在确实需要时才使用可空类型,并善用安全调用、Elvis 操作符等语法糖。
更多内容可参考 Kotlin 官方文档。
Comments
No Comments!