空的安全检查
在java中如果对null的对象进行调用是方法时 会报空指针异常 ,kotlin 针对这种情况做了自己的优化
空赋值
在kotlin中不允许直接对属性进行赋值,
var str = ""
str = null//会提示错误
//正确使用
var name:String?=""
name=null
空检查
在java 为了避免空指针 会利用if 语句进行空检查,如果是非空才进行操作,kotlin 也可以这样
var str: String? = null
val num = if (str != null) str.length else -1//当然这会返回-1
当上面的方法实在是繁琐,下面是kotlin的绝招
val len = str?.length
是不是瞬间爽了很多,简洁得一B,这就是Safe call 安全调用
当然这个还可以连续调用,什么意思,请看大招
val num =str?.length?.toByte() //如果 想调用,还可以继续
精灵操作
类似于java中的问号表达式?:,只是用法有些差别
var str: String? = null
var s = str ?: "Str is the null."
println("Str=$s")//Str=Str is the null.
模拟空指针
!! 可以实现java中的空判断,作用就是当对象为空是报空指针异常,如果非空则放回
var str: String? = null
var num = str!!.length
将会报空指针异常
kotlin.KotlinNullPointerException
类型转换异常
进行类型转换时,如果是同一类型则转换,否者返回为空
var str: String? = "01"
var num: Int? = str as? Int
println("num =$num")//num =null
str 是String类型, num 是Int 类型,很明显 类型是不一样的,当我们使用as?进行转换时,就会返回空,而不会报错。
注意 =两边都有?号
集合的空类型
kotlin 中是允许结合插入null值的,但是也可以过滤掉 方法如下
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()