he is coding

Kotlin的空安全

| Comments

在声明变量时,我们必须要明确该变量是否为空,如果可以为空,则需要加上后缀

1
2
3
var b : String = null //编译不通过

var b : String ? = null //通过

安全的调用

var b : String? = null

此时当我们需要调用b的方法或者获取他的属性时,我们要确保b不能为null,安全调用操作符?.,当表达式非null时,返回真实的值,否则返回null

1
2
3
4
5
6
7
8
9
10
11
12

print(b?.length) // null
b = "null"
print(b?.length) // 4

等价于

if(b==null){
    print(null)
}else{
    print(b.length)
}

也可以处理成,发现null直接抛出NullPointException,而不是继续返回null,使用操作符!!

1
2
3
4
5
6
7
8
9
10
var b : String? = null
print(b!!.length) // 抛出异常

等价于

if(b==null){
    throw NullPointerException()
}else{
    print(b.length)
}

Elvis操作符

  • 使用符号?:
  • 如果 ?: 左侧表达式非空,返回其左侧表达式,否则返回右侧表达式。 请注意,当且仅当左侧为空时,才会对右侧表达式求值。
1
2
3
4
5
6
7
8
9
10
val l = b?.length ?: -1

等价于

if(b == null){
    l = -1
}else{
    l = b.length
}

  • 右侧表达式还支持抛异常return
1
2
3
4
5
6
7
fun doSth(){
    ...
    val l = b?.length ?: return
    val l = b?.length ?: throw NullPointException()
    ...
}

Comments