您的当前位置:首页正文

空安全

来源:华拓网

与Java任何引用都可以为null不同,Kotlin是空安全的,Kotlin中若产生空指针异常只会由下面几点造成

  • 显示调用throw NullPointerExecption()
  • 使用了!!操作符
  • 数据没有初始化
  • 与Java互操作时调用了Java代码中有关null的代码

Kotlin中有关空安全的操作符

安全调用操作符"?"

表示可以为空,可以与let一起使用,表示只对非空值操作

fun main() {
    val list = listOf("zzx", "jane", null, "tracy")
    for (item in list) {
        item?.let { print("$it ") }
    }
}
======结果======
zzx jane tracy 

安全调用也可以出现在赋值操作的左侧,如果有任何一个接收者为空则会跳过赋值操作,右侧的表达式直接不执行

// 如果 `person` 或者 `person.department` 其中之一为空,都不会调用该函数:
person?.department?.head = managersPool.getManager()

Elvis操作符"?:"

下面代码表示如果b不为空就将b.length的值赋值给l,为空则将?:右边的-1赋值给l

val l = b?.length ?: -1

?: 右边也可以根return和throw

 val parent = node.getParent() ?: return null
 val name = node.getName() ?: throw IllegalArgumentException("name expected")

非空断言操作符"!!"

如果b为空会抛出空指针异常

val l=b!!.length

安全的类型转换

如果b转换为Int不成功则返回null

val a:Int?=b as? Int

filterNotNull过滤非空元素

fun main() {
    val list = listOf("zzx", "jane", null, "tracy")
    for (item in list.filterNotNull()) {
        print("$item ")
    }
}
======结果======
zzx jane tracy