空的安全检查


在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()

results matching ""

    No results matching ""