Kotlin資料類和密封類(六)

2021-10-12 16:23:05 字數 1190 閱讀 3505

/**

* 編譯器會自動從主建構函式中根據所有宣告的屬性提取一下函式:

* equals() / hashcode()

* tostring() 格式如 "muser(name=john, age=42)"

* componentn() functions 對應於屬性,按宣告順序排列

* copy() 函式

* 如果這些函式在類中已經被明確定義了,或者從超類中繼承而來,就不會再生成

* 為了保證生成**的一致性以及有意義,資料類需要滿足一下條件:

* 1,主建構函式至少包含乙個引數

* 2,所有的主建構函式的引數必須標識為val或者var

* 3,資料類不可宣告為abstract,open,sealed或者inner

* 4,資料類不能繼承其他類(但是可以實現介面)

* * 元件函式允許資料在解構宣告中使用: val (namee,agee) = copuser

*/data class muser(val name: string, val age: int)

fun main(args: array) ,age is $")//輸出:name is usercopy,age is 20

}/**

* 密封類

* 密封類用來表示受限的類繼承結構:當乙個值為有限幾種的型別, 而不能有任何其他型別時。

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

* 宣告乙個密封類,使用 sealed 修飾類,密封類可以有子類,但是所有的子類都必須要內嵌在密封類中。

* 使用密封類的關鍵好處在於使用 when 表示式 的時候,如果能夠 驗證語句覆蓋了所有情況,就不需要為該語句再新增乙個 else 子句了。

*/sealed class expr

data class const(val number: double) : expr()

data class sum(val e1: expr, val e2: expr) : expr()

object notanumber : expr()

fun eval(expr: expr): double = when (expr)

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

我們經常建立一些只儲存資料的類。在這些類中,一些標準函式往往是從資料機械推導而來的。在 kotlin 中,這叫做 資料類 並標記為 data data class person val name string val age int 為了確保生成的 的一致性以及有意義的行為,資料類必須滿足以下要求 ...

Kotlin 資料類與密封類

資料類 kotlin 可以建立乙個只包含資料的類,關鍵字為 data data class user val name string,val age int 編譯器會自動的從主建構函式中根據所有宣告的屬性提取以下函式 equals hashcode tostring 格式如 user name jo...

Kotlin 資料類與密封類

kotlin可建立乙個只包含資料的類,關鍵字為data data class person val name string,val age int 編譯器會自動的從主建構函式中根據所有宣告的屬性提取以下函式 equals hashcode tostring 格式如 user name john,ag...