6.1 可空性
可空性:Kotlin系統(tǒng)中避免NullPointerException錯誤的特性
- 可空類型
如果你允許調(diào)用方法時傳給它所有可能的實參 ,包括哪些可以為null的實參他爸,需要顯式地在類型名稱后面加上文號來標(biāo)記距误。
fun strLenSafe(s:String?) = ···
//問號可以加在任何類型的后面來表示這個變量可以存儲null引用
沒有問號的類型標(biāo)識這種類型的變量不能存儲null引用己莺。所有常見類型默認(rèn)都是非空的,除非顯式地標(biāo)記為可空
一旦標(biāo)記為可空斤儿,則能對該變量進(jìn)行的操作也會受到限制
類型的含義
類型就是數(shù)據(jù)的分類飞盆,決定了該類型可能的值,以及該類型的值上可以完成的操作安全調(diào)用運算符:‘?.’
允許把一次null檢查和一次方法調(diào)用合并成一個操作
調(diào)用null值的方法融击,調(diào)用不會發(fā)生筑公,表達(dá)式的值為null
也可以調(diào)用屬性Elvis運算符:‘?:’
fun foo(s: String?){
val t :String = s ?: ""
}
Elvis運算符接收兩個參數(shù),如果第一個運算數(shù)不為null尊浪,運算結(jié)果就是第一個運算數(shù)匣屡,否則為第二個運算數(shù)
安全轉(zhuǎn)換運算符:‘a(chǎn)s?’
安全轉(zhuǎn)換運算符嘗試把值轉(zhuǎn)換成給定的類型,如果類型不合適就返回null非空斷言:‘!!’
fun ignoreNulls(s: String?){
val sNotNull:String = s!!
}
//如果s為null拇涤,則拋出NullPointerException捣作,否則表達(dá)式返回s
- ‘let’函數(shù)
‘let’函數(shù)做的事情就是把一個調(diào)用它的對象編程Lambda表達(dá)式的參數(shù)。
foo?.let{
print(it)
}
//foo為null時鹅士,Lambda不會被執(zhí)行
- 延遲初始化的屬性
- 可空類型的擴(kuò)展
類型參數(shù)的可空性
Kotlin中所有泛型類和泛型函數(shù)的類型參數(shù)默認(rèn)都是可空的券躁。
要使類型參數(shù)非空,必須要為它指定一個非空的上界,那樣泛型會拒絕可空值作為實參可空性和Java
6.2基本數(shù)據(jù)類型和其他基本類型
Kotlin不區(qū)分基本數(shù)據(jù)類型和它們的包裝類型
- 基本數(shù)據(jù)類型:Int也拜、Boolean和其他
- 可空的基本數(shù)據(jù)類型:Int?以舒、Boolean?和其他