Kotlin學習筆記 六 資料類與密封類

2021-09-25 05:32:57 字數 1995 閱讀 8609

我們經常建立一些只儲存資料的類。

在這些類中,一些標準函式往往是從資料機械推導而來的。在 kotlin 中,這叫做 資料類 並標記為 data:

data class person(val name: string , val age: int)
為了確保生成的**的一致性以及有意義的行為,資料類必須滿足以下要求:

在 jvm 中,如果生成的類需要含有乙個無參的建構函式,則所有的屬性必須指定預設值。

data class person(val name: string = "", val age: int = 0)
對於那些自動生成的函式,編譯器只使用在主建構函式內部定義的屬性。如需在生成的實現中排出乙個屬性,請將其宣告在類體中:

data class person(val name: string)
在 tostring()、 equals()、 hashcode() 以及 copy() 的實現中只會用到 name 屬性,並且只有乙個 component 函式 component1()。雖然兩個 person 物件可以有不同的年齡,但它們會視為相等。也就是說,雖然有兩個屬性,但是age屬性只能當做主建構函式中的屬性,不可以出現在其他函式中

val person1 = person("john")

val person2 = person("john")

person1.age = 10

person2.age = 20

在一些特定的情況下,我們需要複製乙個物件改變它的一些屬性,但其餘部分保持不變,這時,就可以使用copy() 函式:

fun copy(name: string = this.name, age: int = this.age) = person(name, age)
也可以這樣寫

val person1= user(name = "張三", age = 18) 

val person2= person1.copy(age = 22)

資料類中有乙個特殊的函式, component 函式 ,可在解構宣告中使用,如下:

val person= user("張三", 35)

val (name, age) = person

println("$name, $age years of age") // 輸出 "張三, 35 years of age"

密封類用來表示受限的類繼承結構:當乙個值為有限集中的型別、而不能有任何其他型別。

在某種意義上,他們是列舉類的擴充套件:列舉型別的值集合也是受限的,但每個列舉常量只存在乙個例項,而密封類的乙個子類可以有可包含狀態的多個例項。

要宣告乙個密封類,需要在類名前面新增 sealed 修飾符。雖然密封類也可以有子類,但是所有子類都必須在與密封類自身相同的檔案中宣告。

(在 kotlin 1.1 之前,子類必須巢狀在密封類宣告的內部)。

sealed class animal

data class person(val name: string) : animal()

data class animals(val e1: animal, val e2: animal) : animal()

在kotlin 1.1 中,有乙個額外的新功能:資料類擴充套件包括密封類在內的其他類的可能性。

乙個密封類是自身抽象的,它不能直接例項化,但可以有抽象(abstract)成員。

密封類不允許有非-private 建構函式(其建構函式預設為 private)。

請注意:擴充套件密封類子類的類(間接繼承者)可以放在任何位置,而無需在同乙個檔案中。也就是繼承了密封類的實現類。

使用密封類的關鍵好處在於使用 when 表示式 的時候,如果能夠驗證語句覆蓋了所有情況,就不需要為該語句再新增乙個 else 子句了。當然,這只有當你用 when 作為表示式(使用結果)而不是作為語句時才有用。

kotlin學習筆記(六)

kotlin 有三種結構跳轉表示式 return break 結束最近的閉合迴圈 continue 跳到最近的閉合迴圈的下一次迴圈 上述表示式都可以作為更大的表示式的一部分 val s person.name return 這些表示式的型別是 nothing type 在 kotlin 中表示式可以...

Kotlin筆記(六)類

class 類名 類頭 指定其型別引數 主 建構函式等 class person constructor firstname string 沒有類頭 class person 沒有類頭類體 class person 建構函式 class person constructor firstname st...

kotlin學習筆記(5)Kotlin 類與物件

讀書學習筆記 kotlin 開發快速入門與實戰 通過把書中的內容 複述一遍,把 敲一遍,達到複習效果 主要內容 這裡所說的物件導向 是指物件導向程式設計 oop 物件導向包括三個部分 物件導向分析 ooa 物件導向設計 ood 物件導向程式設計 oop 5.1.1 類 萬事萬物都具有其自身的屬性和方...