iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

Practice again& again.系列 第 27

Android - 建立 Data class

  • 分享至 

  • xImage
  •  

Data class 特性

Kotlin 的 Data class 預設包含以下 Function:

Function 說明
equals() 判斷物件相等
hashCode() 傳回 hash code 函式
toString() 將屬性資料轉換為字串
copy() 複製原有物件的屬性值,回傳一個新物件
componentN() 產生與屬性宣告順序對應的讀取函式。例如在資料類別中宣告三個屬性,會自動產生三組 Function: component1()component2()component3(),分別傳回對應的屬性值。

建立 Data class

右鍵專案資料夾 → 「New」 → 「Kotlin Class/File」 → 命名並選擇 「Data class」
01

宣告

於 Data class 建構式宣告屬性,後續用於存取資料欄位

data class Country (
    val id: Int,
    val name: String, 
    val currency: String, 
    val region: String,
    val language: String
    ) {
    ...
}

若 Data class 僅具有資料欄位,無類別內容,可省略 {}

data class Country (
    val id: Int,
    val name: String, 
    val currency: String, 
    val region: String,
    val language: String
    )

Main Function 中呼叫 Data class 實體屬性及函式

建立物件實體

fun main() {
    val countryUk = Country(1, "United Kingdom", "GBP", "Europe", "English")
    val countryUs = Country(2, "United States", "USD", "North America", "English")
    val countryUk2 = Country(1, "United Kingdom", "GBP", "Europe", "English")

    //接續下方內容
}

toString():將屬性資料轉換為字串

    //接續上方內容,寫於 main() function 中

    println(countryUk.toString()) 
    // output: Country(id=1, name=United Kingdom, currency=GBP, region=Europe, language=English)

equals():判斷物件是否相等

    println(countryUk.equals(countryUk2)) 
    // output: true

copy():複製為新的物件

    val countryUs2 = countryUs.copy()
    println(countryUs2) 
    // output: Country(id=2, name=United States, currency=USD, region=North America, language=English)

copy():指定部份的屬性複製一個新的物件

    val countryUk3 = countryUk.copy(id = 3, name = "Canada", currency = "CAD")  
    println(countryUk3) 
    // output: Country(id=3, name=Canada, currency=CAD, "North America", "English")

componentN():取得屬性值

    print(countryUk.component2())
    // output: United Kingdom

直接取得屬性值

    print(countryUs.name)
    // output: United States

上一篇
Android - Compose UI 自訂樣式
下一篇
Android - Http Request 前置作業
系列文
Practice again& again.30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言