Kotlin空安全:彻底告别Java空指针崩溃
·
前言
如果你之前使用过Java,一定被一个问题折磨无数次:NullPointerException——空指针异常。
在Java中,空指针式程序崩溃、线上Bug、闪退的第一大元凶。我们写了无数的if(obj != null)判断,代码臃肿、重复,但即便如此也很难100%规避空指针。
而空安全,正式Kotlin最核心的标志性特性。
一、Kotlin核心规则:默认非空,可空需手动开启。
1、非空类型
Kotlin中,普通类型默认不允许为null:
// 非空类型:绝对不能赋值 null
var name: String = "Kotlin"
name = null // 编译直接报错!
这也是Kotlin解决NPE的根本:不能空的变量,编译器直接禁止赋值null。
2、可空标志
如果业务确实需要空值,必须手动加?,显示声明->我可以为null
// 可空类型:String? 允许 null
var name: String? = "Kotlin"
name = null // 合法
3、可空类型不能直接调用方法/属性
Kotlin不允许对可空类型直接调用方法,杜绝一切潜在NPE。
var name: String? = null
name.length // 编译报错!不允许直接调用
二、Kotlin四大安全解决方案
1、安全调用 ?.
规则:不为null就调用,为null直接返回null,不报错。
val name: String? = null
val len = name?.length
2、Elvis表达式 ?:空值兜底
规则:为空取默认值,不为空取原值
val name: String? = null
val realName = name ?: "默认用户名"
// 为空 -> 取后者
日常高频组合:安全调用+Elvis
val length = name?.length ?: 0
3、非空
规则:强制把可空类型转为非空,告诉编辑器:我保证它一定不为空
val name: String? = null
name!!.length // 编译通过,运行直接 NPE
忠告:能不用就不用!
!! 的本质是:放弃 Kotlin 空安全,退回 Java 模式。
4、智能类型推导
Kotlin编译器及其聪明,只要你做了if判空,自动智能类型转换,可空类型自动变成非空类型。
val name: String? = "abc"
if(name != null){
// 自动识别:此处 name 一定非空
println(name.length)
}
三、总结
Kotlin之所以能成为安卓官方首选语言、替代Java,空安全是最大底气。
掌握空值体系,你就彻底告别了Java时代无休止的空指针bug,写出更健壮、更简洁、更安全的现代化代码。
更多推荐

所有评论(0)