Kotlin 資料類的使用規則及其反編譯的結果

2021-10-09 19:49:34 字數 1929 閱讀 5575

資料類就是只儲存資料包含操作行為的類

這裡建立了乙個person的資料類和person2的資料類,並演示兩種反編譯結果

//  資料類 data class

/* 資料類生成的必要條件

主構造方法至少要有乙個引數

所有的主構造方法都需要被標記為val或者var 標記了叫屬性 不標記叫引數

資料類不能是抽象 open sealed(密封)inner類

編譯器會自動生成:

1,equals ,hashcode 方法

2,tostring :name +age + address

3,針對屬性的 componentn 方法,並且按照屬性的宣告順序來生成

4,copy方法

關於資料類的繼承要點

1、如果資料類中顯示定義了equal hashcode tostring方法或者是在資料類的父類中將這些方法宣告為了final

那麼這些方法不會再生成,會使用現成的

2、如果父類擁有了 componentn 方法並且是open的 返回型別是相容的型別 那麼編譯器就會在資料類中生成相應的 componentn方法

並且重寫父類中的這些方法,如果父類中的這些方法由於不相容的簽名或是被定義為final的 那麼編譯器就會報錯

3、在資料類中顯式提供 componentn 方法以及copy方法(在相同數量的屬性定義,數量不相同則標記為過載)是不允許的

*/data

class

person

(val name: string,

var age: int,

var address: string)

//所有成員在有預設值的情況下 編譯器提供無參構造方法,可看反編譯結果檢視其擁有空參構造方法

data

class

person2

(val name: string =

"wuwukai"

,var age: int =26,

var address: string =

"shanghai"

)fun

main

(args: array

)output:

person

(name=lbw, age=

26, address=shanghai)

person

(name=lbw, age=

55, address=shanghai)

----

----

-------

lbw 26 shanghai

person2

(name=wuwukai, age=

26, address=shanghai)

下面是person.class反編譯出來結果

下面是person2.class反編譯出來的結果,注意這裡只貼出了空參構造方法

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

Kotlin 學習 資料類

在 kotlin 中,有乙個 data 關鍵字,來標記類,這種類一般只用來儲存資料,但是資料類必須滿足類以下條件 1.主建構函式至少有乙個引數 2.主建構函式的引數必須使用 var 或者 val 標記 3.資料類不能使抽象 開放 密封或者內部的 4.1.1以前 資料類只能實現介面 data clas...

Kotlin資料類詳解

資料類需要滿足以下要求 對於資料類,編譯器會自動生成如下內容 關於資料類成員的繼承要點 data class person var name string,var age int,var address string 在jvm上,如果生成的類需要擁有無參構造方法,那麼就需要為所有的屬性指定預設值。d...

Kotlin 資料類與密封類

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