一寨闹、安全調(diào)用操作符 ?.
b?.length // 當(dāng) `b`為 null值時(shí)础嫡,返回b;否者掏觉,返回 b.length
安全調(diào)用操作符区端,在鏈?zhǔn)秸{(diào)用中非常有用。官方例子:
如果一個(gè)員工 Bob 可能會(huì)(或者不會(huì))分配給一個(gè)部門澳腹, 并且可能有另外一個(gè)員工是該部門的負(fù)責(zé)人织盼,那么獲取 Bob 所在部門負(fù)責(zé)人(如果有的話)的名字
bob?.department?.head?.name
任何一個(gè)屬性為空,最后都會(huì)返回 null
二酱塔、Elvis 操作符 ?:
b?: -1 // 若b為非空沥邻,則返回b,否者返回 -1
繼續(xù)官方的例子
// 若 b 不為空羊娃,則取b.length唐全, 否則返回 -1
val l: Int = if (b != null) b.length else -1
// 使用 ?: 操作符
val I:Int = b?.length ?: -1
如果 ?: 左側(cè)表達(dá)式非空,elvis 操作符就返回其左側(cè)表達(dá)式蕊玷,否則返回右側(cè)表達(dá)式邮利。 請(qǐng)注意,當(dāng)且僅當(dāng)左側(cè)為空時(shí)垃帅,才會(huì)對(duì)右側(cè)表達(dá)式求值
三延届、非空斷言運(yùn)算符 !!
非空斷言運(yùn)算符(!!)將任何值轉(zhuǎn)換為非空類型,若該值為空則拋出異常(NPE異常贸诚,空指針異常)方庭。
val b = 9!!
println(b) // 9
四、安全的類型轉(zhuǎn)換 as?
val a = true
val aInt: Int? = a as? Int // null
val b = 9
val bInt: Int? = b as? Int // 9
當(dāng)對(duì)目標(biāo)進(jìn)行類型轉(zhuǎn)換時(shí)酱固,若轉(zhuǎn)換不成功二鳄,則會(huì)返回 null;否則媒怯,返回目標(biāo)值订讼。
五、過(guò)濾非空集合 filterNotNull
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull() // [1, 2, 4]
六扇苞、is
檢查某個(gè)對(duì)象是否符合給定類型
val a = "abc"
println(a is String) // true