一、安全调用操作符 ?.
b?.length // 当 `b`为 null值时,返回b;否者,返回 b.length
安全调用操作符,在链式调用中非常有用。官方例子:
如果一个员工 Bob 可能会(或者不会)分配给一个部门, 并且可能有另外一个员工是该部门的负责人,那么获取 Bob 所在部门负责人(如果有的话)的名字
bob?.department?.head?.name
任何一个属性为空,最后都会返回 null
二、Elvis 操作符 ?:
b?: -1 // 若b为非空,则返回b,否者返回 -1
继续官方的例子
// 若 b 不为空,则取b.length, 否则返回 -1
val l: Int = if (b != null) b.length else -1
// 使用 ?: 操作符
val I:Int = b?.length ?: -1
如果 ?: 左侧表达式非空,elvis 操作符就返回其左侧表达式,否则返回右侧表达式。 请注意,当且仅当左侧为空时,才会对右侧表达式求值
三、非空断言运算符 !!
非空断言运算符(!!)将任何值转换为非空类型,若该值为空则抛出异常(NPE异常,空指针异常)。
val b = 9!!
println(b) // 9
四、安全的类型转换 as?
val a = true
val aInt: Int? = a as? Int // null
val b = 9
val bInt: Int? = b as? Int // 9
当对目标进行类型转换时,若转换不成功,则会返回 null;否则,返回目标值。
五、过滤非空集合 filterNotNull
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull() // [1, 2, 4]
六、is
检查某个对象是否符合给定类型
val a = "abc"
println(a is String) // true
网友评论