外观
Kotlin 的空安全能彻底避免空指针吗?
标准回答
Kotlin 区分可空和非空类型,帮助在编译期发现很多空值问题;但非空断言、Java 平台类型、初始化顺序等仍可能在运行时造成空指针。
关键机制
- String? 表示可空;?. 安全访问;?: 提供空值替代;!! 表示开发者断言非空,断言错误就会抛异常。
- Java 返回值若缺少空性注解,Kotlin 可能视为平台类型,需要在边界校验;泛型集合中的元素也要考虑空值。
- data class 自动生成常用值对象能力,扩展函数改善调用形式,when 支持清晰分支;理解语义后再追求简写。
通俗例子
设备 SDK 是 Java 实现,getName 可能返回 null。进入 Kotlin 数据层先转换为明确可空类型,再决定显示默认名称还是报数据错误。
易混淆点
不要把到处加 !! 当作“修复编译错误”;这只是把风险从编译期推迟到运行期。
参考资料
内容来源
- Android 技术札记 · 原条目
kotlin-null