文章目錄
- data class
-
- 應用場景
- data class為我們做了什麼
- copy函數
- componentN函數-解構聲明(Destructuring Declarations)
- 兩個等号`==`和三個等号`===`
data class
應用場景
建立一些類除了儲存資料不幹其他事情,比如我們解析網絡請求下來的資料。Kotlin就提供了一個非常友善的class—— data class,就像上邊的栗子
在Kotlin中,聲明類的同時可以友善的直接聲明構造方法等參數,鑒于data class隻是存放資料,那麼隻一個構造方法足矣
data class為我們做了什麼
編譯器會根據我們在構造函數裡聲明的屬性自動導出下列成員:
equals()/hashCode()
toString()方法
componentN()方法
copy()方法
var girl1:Girl = Girl("嫚嫚",29,160,"廊坊")
var girl2:Girl = Girl("嫚嫚",29,160,"廊坊")
println(girl1.equals(girl2))
println(girl1.hashCode())
println(girl1)
如果資料類需要無參構造函數,則所有屬性必須有預設值:
data class Girl(var name:String = "",var age:Int = 0,var height:Int = 0,var address:String = "")
var girl3:Girl = Girl()
copy函數
當要複制一個對象,隻改變一些屬性,但其餘不變,copy()就是為此而生
var girl1: Girl = Girl("嫚嫚", 29, 160, "廊坊")
var girl2: Girl = girl1.copy("二帆")//傳遞第一參數,第二參數預設
var girl3: Girl = girl1.copy("真真", 28, 168, "福建")//傳遞所有參數
var girl4: Girl = girl1.copy(age = 30) //命名參數,傳遞指定參數
println("$girl1,$girl2,$girl3,$girl4")
//結果
Girl(name=嫚嫚, age=29, height=160, address=廊坊),
Girl(name=二帆, age=29, height=160, address=廊坊),
Girl(name=真真, age=28, height=168, address=福建),
Girl(name=嫚嫚, age=30, height=160, address=廊坊)
componentN函數-解構聲明(Destructuring Declarations)
編譯器為資料類(data class)自動聲明componentN()函數,可直接用解構聲明
var girl1: Girl = Girl("嫚嫚", 29, 160, "廊坊")
var (a,b,c,d) = girl1
println("$a,$b,$c,$d")
兩個等号 ==
和三個等号 ===
==
===
Kotlin有兩種相等性(equality):
- Referential/引用相等(兩個引用指向同一對象):
(否定形式===
!==
)
三個等号
比較,是對象引用(位址),即判斷是否同一個對象===
- Structural/結構相等(用equals()檢查):
(否定形式==
!=
)
兩個等号
比較,是通過equals()函數進行比較==
var girl1: Girl = Girl("嫚嫚", 29, 160, "廊坊")
var girl2: Girl = Girl("嫚嫚", 29, 160, "廊坊")
var girl3: Girl = Girl("富婆", 30, 158, "貴州")
println(girl1 == girl2) //輸出true, 對象資料相同
println(girl2 == girl3) //輸出false, 對象資料不同
// girl1,girl2,girl3都是不同對象,即對象引用(位址)不同
println(girl1 === girl2) //輸出false, 對象引用(位址)不同
println(girl1 === girl3) //輸出false, 對象引用(位址)不同