kotlin的類型系統
一.可空性
1.可空類型
問號可以加在任何類型的後面來表示這類型可以保存null引用,kotlin中的類型都表示其非空
沒有問號的類型表示其不能存儲null引用
2.安全調用運算符 ?.
var name : String? = user?.name
3.Elvis運算符:提供代替null的默認值
fun foo(s : String?){
val t :String = s ?: ""
}//如果s爲null,則返回一個空字符串
fun strLen(s : String?) : Int = s?.length ?: 0
4.安全轉換 as?
運算符嘗試把值轉換成指定的類型,如果值不是合適的類型就爲null
5.非空斷言 !!
運算符可以把任何值轉換成非空類型。如果對null做非空斷言,則會拋出異常
拋出異常的位置爲非空斷言所在的位置
6.let函數
let函數用於處理可空表達式,把調用它的對象變成lambda表達式的參數
當參數不爲null時,執行lambda表達式;當參數爲null時,什麼都不發生
email?.let{
sendEmail(it)
}
7.延遲初始化的屬性:通過lateinit關鍵字標記
8.可空類的拓展、類型參數的可空性
二.數據類型
kotlin並不區分基本數據類型和包裝類型
在運行時,數字類型會儘可能使用最高效的方式來表示,除了泛型類。
在進行數字轉換時,kotlin需要顯式的進行轉換
val i = 1//int
val l : Long = i.toLong()//顯式轉換
Any類型
對應Java中的Object類,Any類型是kotlin中所有非空類型的超類型
把基本數據類型的值傳遞給Any變量是會自動裝箱
當kotlin使用Any時,它會被編譯成Java字節碼中的Object
Unit類型類比於Java的void,Nothing類型表示這個函數永不返回
三.集合與數組
List<Int?>//集合本身不爲空,但是列表中每個值可能爲空
List<Int>?//集合可能爲空,但是列表中的每個值都不爲空
只讀集合和可變集合
數組的創建
方法 | 作用 |
---|---|
arrayOf | 創建一個數組,包含元素時指定爲該函數的實參 |
arrayOfNulls | 創建包含null的數組 |
Array | 構造方法接受數組大小和lambda表達式 |
var array = Array<26>{ i -> ('a' + i).toString() }