Kotlin Data Class (資料類別)

在開發時,我們常需要建立單純用來「儲存資料」的類別 (POJO / DTO)。 在 Java 中,你得寫 toString(), equals(), hashCode(), copy()... 有夠麻煩。 在 Kotlin 中,加上 data 一個字就搞定。

定義 Data Class

data class User(val name: String, val age: Int)

限制條件:

  1. 主建構子至少要有一個參數。
  2. 主建構子的參數必須加上 valvar
  3. 不能是 abstract, open, sealed, inner

編譯器會自動幫你產生:

  • toString(): 輸出 User(name=Miko, age=18)
  • equals() / hashCode(): 比較內容值 (Value Equality)
  • copy(): 複製物件
  • componentN(): 用於解構宣告

複製物件 (copy)

當使用不可變資料 (Immutable) 時,我們常需要「修改其中一個屬性,其他不變」。

val user1 = User("Miko", 18)
val user2 = user1.copy(age = 19) // 只有 age 變了,name 還是 "Miko"
注意: copy() 執行的是 淺層複製 (Shallow Copy)。如果屬性是用物件 (例如 List),複製出來的 List 還是指向同一個記憶體位址。

解構宣告 (Destructuring)

可以把物件直接拆解成變數。

val (name, age) = user1
println("Name: $name, Age: $age")

這在處理 API 回傳資料時超級方便!