Kotlin 資料類與密封類

2021-09-27 01:52:22 字數 1587 閱讀 8381

資料類

kotlin 可以建立乙個只包含資料的類,關鍵字為 data:

data class user(val name: string, val age: int)
編譯器會自動的從主建構函式中根據所有宣告的屬性提取以下函式:

equals() / hashcode()

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

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

copy() 函式

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

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

主建構函式至少包含乙個引數。

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

資料類不可以宣告為 abstract, open, sealed 或者 inner;

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

複製

fun copy(name: string = this.name, age: int = this.age) = user(name, age)
例項

使用 copy 類複製 user 資料類,並修改 age 屬性:

data class user(val name: string, val age: int)

fun main(args: array)

密封類

密封類用來表示受限的類繼承結構:當乙個值為有限幾種的型別, 而不能有任何其他型別時。在某種意義上,他們是列舉類的

擴充套件:列舉型別的值集合 也是受限的,但每個列舉常量只存在乙個例項,而密封類 的乙個子類可以有可包含狀態的多個例項。 宣告乙個密封類,使用

sealed 修飾類,密封類可以有子類,但是所有的子類都必須要內嵌在密封類中。 sealed 不能修飾 inte***ce

,abstract class(會報 warning,但是不會出現編譯錯誤)

sealed class expr

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

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

object notanumber : expr()

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

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

Kotlin 資料類與密封類

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

Kotlin 資料類與密封類

密封類end kotlin 可以建立乙個只包含資料的類,關鍵字為data data class user val name string,val age int 編譯器會自動的從主建構函式中根據所有宣告的屬性提取以下函式 如果這些函式在類中已經被明確定義了,或者從超類中繼承而來,就不再會生成。為了保...

(十)kotlin資料類與密封類

kotlin 可以建立乙個只包含資料的類,關鍵字為 data data class user val name string val age int 編譯器會自動的從主建構函式中根據所有宣告的屬性提取以下函式 如果這些函式在類中已經被明確定義了,或者從超類中繼承而來,就不再會生成。為了保證生成 的一...