Skip to content

Latest commit

 

History

History
43 lines (38 loc) · 1.61 KB

9.Kotlin中的null安全.md

File metadata and controls

43 lines (38 loc) · 1.61 KB

9.Kotlin中的null安全

可null类型怎么工作

指定一个变量是可null是通过在类型的最后增加一个问号。因为在Kotlin中一切都是对象(甚至是Java中原始数据类型),一切都是可null的。所以,当然我们可以有一个可null的integer:

val a: Int? = null

一个可nul类型,你在没有进行检查之前你是不能直接使用它。这个代码不能被编译:

val a: Int? =null
a.toString()

还有一个特性是当我们检查了一个对象的可null性,之后这个对象就会自动转型成不可null类型,这就是Kotlin编译器的智能转换:

val a: Int? = null
if (a != null) {
    a.toString()
}

安全操作符(?):只有这个变量不是null的时候才会去执行那行代码,否则不做任何事情。

val a: Int? = null
a?.toString()

Elvis操作符(?:)

val a: Int? = null
val myString = a?.toString() ?: ""
val myString = a?.toString() ?: return false
val myString = a?.toString() ?: throw IllegalStateException()

我们可能会遇到这种情景,我们确定我们是在用一个非null变量,但是他的类型却是可null的。我们可以使用!!操作符来强制编译器执行可null类型时跳过限制检查:

val a: Int? = null
...
a!!.toString() //如果变量为null,为抛出异常

可null性和Java库

当你有疑问时,你可以就用可null的对象然后处理掉用可能的null。记住,如果你使用了 !!,可能是因为你确信对象不可能为null,如果是这样,请定义为非null。