7.7 Kotlin 數(shù)據(jù)類

數(shù)據(jù)類是一個簡單的類,用于保存數(shù)據(jù)/狀態(tài)并包含標準功能(函數(shù))。

數(shù)據(jù)類聲明

  • data關鍵字用于將類聲明為數(shù)據(jù)類。
  • 聲明數(shù)據(jù)類必須至少包含一個帶有屬性參數(shù)(val或var)的主構造函數(shù)。
  • 類不能標記為開放,抽象,密封或內部。
  • 該類可以擴展(繼承)其他類,它還可以實現(xiàn)其他接口。

示例:

data class Persion(var name: String, var age: String)

fun main(args: Array<String>) {
    val persion = Persion("alfred", 28)
    println("${persion.name}: ${persion.age}")
}

結果:

alfred: 28

數(shù)據(jù)類內部函數(shù)

Kotlin 中自動生成如下函數(shù),因此數(shù)據(jù)類消除了反復套用代碼。

equals(): Boolean
hashCode(): Int
toString(): String
component() 函數(shù)對應的屬性
copy()

數(shù)據(jù)類hashCode()和equals()

  • 如果兩個對象在 kotlin 中相同,那么它們具有相同的hashCode,我們可以使用hashCode()方法獲得。
  • 如果兩個對象的hashCode()相等,則equals()返回true,否則返回false。
data class Person(var name: String, var age: String)

fun main(args: Array<String>) {
    val person = Person("alfred", 28)
    val user = person

    println("person_hashcode ${person.hashCode()} \nuser_hashcode ${user.hashCode()}")
    println("${person.equals(user)}")
}

結果:

persion_hashcode -916812346 
user_hashcode -916812346
true

數(shù)據(jù)類copy()

數(shù)據(jù)類提供了一個copy()方法,用于創(chuàng)建對象的副本(或冒號)。 使用copy()方法,可以更改對象的部分或全部屬性。
舉個例子:Person類的對象persion,姓名為alfred 年齡為28。我們創(chuàng)建了另一個名為user的對象person并使用數(shù)據(jù)類的copy()方法,復制了person對象的姓名。

data class Person(var name: String, var age: String)

fun main(args: Array<String>) {
    val person = Person("alfred", 28)
    val user = person.copy(age = 11)
    println("${user.name} : ${user.age}")
}

結果:

alfred : 11

數(shù)據(jù)類toString()

data類的toString()方法返回對象的String表示形式。

data class Person(var name: String, var age: String)

fun main(args: Array<String>) {
    val person = Person("alfred", 28)
    println(person.toString())
}

結果:

Person(name=alfred, age=28)

數(shù)據(jù)類component()

以上面示例為例,component1()方法返回對象的第一個屬性的值,component2()返回第二個屬性的值。不過一般不采用這種方式獲取屬性。

fun main(args: Array<String>) {
    val person = Person("alfred", 28)
    println(person.component1())
    println(person.component2())
}

結果:

alfred
28
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容