在我们才从Java转Kotlin的时候经常会写类似下面这样的代码
var str:String?=null
fun init(){
str="wusy"
var list=ArrayList<String>()
list.add(str)
}
这个时候,编译会无法通过,系统会给你改成list.add(str!!)
以通过编译。会出现这样的原因是Kotlin有着自己的判空机制。"str!!"表示str一定不为空。但是我们的在定义str的时候可以看到var str:String?=null
,str是可以为null的,如果我们没有str="wusy"
去赋值。那么程序跑起来一定会崩溃NullPointException。
在日常开发中,这样的场景很常见,例如:我们获取服务器的数据,正常情况下,程序一切OK,但是,哪天服务器大姨妈,返回一个其中的某一个数据为null。整个系统就崩溃了,用户体验极差。咱们怎么去解决这个问题了。笔者这里提供一个解决方法。
var str:String?=null
fun init(){
str="wusy"
var list=ArrayList<String>()
list.add(str?:"default")
}
我们一定要拒绝"!!",用xx?.xx?:""
代替。这样写代表的是如果引用的xx存在null,则使用默认的值。这样即便服务器大姨妈了,我们也有default去应对,不至于程序奔溃,让用户体验贼差。