Kotlin 資料類與密封類

2021-10-23 13:31:26 字數 2136 閱讀 2608

密封類end

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

data

class

user

(val name: string,

val age: int)

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

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

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

複製使用copy()函式,我們可以使用該函式複製物件並修改部分屬性, 對於上文的user類,其實現會類似下面這樣:

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)

funmain

(args: array

)

結果:

user

(name=jack, age=1)

user

(name=jack, age=

2)

元件函式允許資料類在解構宣告中使用:

val jane =

user

("jane",35

)val

(name, age)

= jane

println

("$name, $age years of age"

)// prints "jane, 35 years of age"

標準庫提供了pairtriple。在大多數情形中,命名資料類是更好的設計選擇,因為這樣**可讀性更強而且提供了有意義的名字和屬性。

密封類用來表示受限的類繼承結構:當乙個值為有限幾種的型別, 而不能有任何其他型別時。在某種意義上,他們是列舉類的擴充套件:列舉型別的值集合 也是受限的,但每個列舉常量只存在乙個例項,而密封類 的乙個子類可以有可包含狀態的多個例項。

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

sealed不能修飾inte***ce,abstractclass(會報warning,但是不會出現編譯錯誤)

sealed

class expr

data

class

const

(val number: double)

:expr()

data

class

sum(

val e1: expr,

val e2: expr)

:expr()

object notanumber :

expr()

funeval

(expr: expr)

: double =

when

(expr)

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

fun

eval

(expr: expr)

: double =

when

(expr)

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...

(十)kotlin資料類與密封類

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