Kotlin基礎知識(十二)——基本數據類型和其餘數據類型

1、基本數據類型:Int、Boolean及其餘

Kotlin並不區分 基本數據類型和包裝類型,永遠使用同一個類型。java

大多數狀況下——對於變量、屬性、參數和返回類型——Kotlin的Int類型會被編譯成Java基本數據類型int。惟一不可行的例外是泛型類,如集合。markdown

2、可空的基本數據類型:Int?、Boolean?及其餘

Kotlin中的可空類型 不能用Java的基本數據類型表示,由於***null只能被存儲在Java的引用類型***的變量中。這就意味着任什麼時候候只要使用了基本數據類型的可空版本,它就會編譯成對應的包裝類型。ide

3、數字轉換

Kotlin和Java之間一條重要的區別就是處理數字轉換的方式。函數

Kotlin不會自動地把數字從一種類型轉換成另一種,即使是轉換成範圍更大的類型。ui

爲避免意外狀況,Kotlin要求轉換必須是顯式的,尤爲是在比較裝箱值的時候。spa

4、「Any」和「Any?」:根類型

和Object做爲Java類層級結構的根差很少,Any*類型是Kotlin全部非空類型超類型*(非空類型的根)。code

注意***Any是非空類型,因此Any類型的變量不能夠持有null值。在Kotlin中若是你須要能夠持有任何可能值的變量,包括null在內,必須使用Any?***類型。orm

在底層,Any類型對應java.lang.Object。Kotlin把Java方法參數和返回類型中用到的Object類型看做***Any***.string

5、Unit類型:Kotlin的void

Kotlin中的***Unit類型完成了Java中的void***同樣的功能。當函數沒什麼有意思的結果要返回時,它能夠用做函數的返回類型:it

fun f(): Unit { ... }
複製代碼

語法上,這和寫一個帶有代碼塊體但不帶類型聲明的函數沒有什麼不一樣:

// 顯式的Unit聲明被省略了
fun f(): { ... }
複製代碼

Kotlin和Unit和Java的void到底有什麼不同呢?Unit是一個完備的類型,能夠做爲類型參數**,而void卻不行。只存在一個值是***Unit類型,這個值也叫做Unit,而且(在函數中)會被隱式返回**。在重寫返回泛型參數的函數時這很是有用,只須要讓方法返回**Unit***類型的值:

interface Processor<T> {
    fun process(): T
}

class NoResultProcessor: Processor<Unit> {
    // 返回Unit,但能夠省略類型說明
    override fun process() {
        // do stuff
        // 這裏不須要顯式的return
    }
}
複製代碼

6、Nothing類型:「這個函數永不返回」

*Nothing*類型沒有任何值,有被看成函數返回值使用,或者被看成泛型函數返回值的類型參數使用纔會有意義。在其餘狀況下,聲明一個不能存儲任何的變量沒有任何意義。

fun fail(message: String): Nothing {
    throw IllegalStateException(message)

>>> fail("Error occurred")
java.lang.IllegalStateException: Error occurred
複製代碼

注意:返回***Nothing的函數能夠放在Elvis***運算符的右邊作先決條件檢查。

相關文章
相關標籤/搜索