前言
在日常 Kotlin 开发中,大家或多或少都遇到过 NullPointerException。
明明 Kotlin 标榜“空安全”,为什么实际项目里依旧会踩坑?尤其在和 Gson 这类第三方库结合时,经常出现“参数不能为空,却传了 null”的问题。
本文将从 Kotlin 的空安全原理讲起,结合真实开发场景,总结常见坑点与最佳实践,帮你彻底告别 NPE。
为什么要学空安全?
在 Java 中,空指针异常 (NullPointerException, NPE) 是最常见的运行时错误。
Kotlin 的设计目标之一,就是 通过语言层面消除 NPE。
所以 Kotlin 引入了 可空类型(nullable) 和 不可空类型(non-nullable) 的概念,让“空”在编译期就能被发现。
一、可空与不可空
在 Kotlin 里,变量必须显式声明是否允许为空:
val a: String = "Hello" // 不可为 null
val b: String? = null // 可为 null
- 不可空类型 (
String):不能赋值null,编译时报错 - 可空类型 (
String?):可以为null,但用的时候必须判空
二、四大空安全操作符
-
安全调用(
?.)
如果对象为null,返回null,不会抛异常:val length = b?.length // b 为 null 时返回 null -
Elvis 操作符(
?:)
提供默认值:val length = b?.length ?: 0 -
非空断言(
!!)
强制认为不为null,如果为null就直接 NPE:val length = b!!.length -
let高阶函数
仅当对象非空时执行:b?.let { println("Length = ${ it.


1401

被折叠的 条评论
为什么被折叠?



