<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Kotlin 數據類 > 原文: [https://www.programiz.com/kotlin-programming/data-class](https://www.programiz.com/kotlin-programming/data-class) #### 在本文中,您將學習在 Kotlin 中創建數據類。 您還將了解數據類必須滿足的要求及其標準函數。 可能會出現一種情況,您需要創建一個僅用于保存數據的類。 在這種情況下,您可以將類別標記為`data`以創建數據類別。 例如, ```kt data class Person(val name: String, var age: Int) ``` 對于此類,編譯器會自動生成: * 主要構造器的`copy()`函數,`equals()`和`hashCode()`對以及`toString()`形式 * `componentN()`函數 在詳細討論這些函數之前,讓我們討論數據類必須滿足的要求。 * * * ## Kotlin 數據類要求 要求如下: * 主構造器必須至少具有一個參數。 * 主構造器的參數必須標記為`val`(只讀)或`var`(讀寫)。 * 該類不能是開放的,抽象的,內部的或密封的。 * 該類可以擴展其他類或實現接口。 如果您使用的是 1.1 之前的 Kotlin 版本,則該類只能實現接口。 * * * ## 示例:Kotlin 數據類 ```kt data class User(val name: String, val age: Int) fun main(args: Array<String>) { val jack = User("jack", 29) println("name = ${jack.name}") println("age = ${jack.age}") } ``` 運行該程序時,輸出為: ```kt name = jack age = 29 ``` * * * 聲明數據類時,編譯器會在后臺自動生成一些函數,例如`toString()`,`equals()`和`hashcode()`等。 這有助于使代碼簡潔。 如果您使用過 Java,則需要編寫很多樣板代碼。 讓我們使用以下函數: * * * ### `copy` 對于數據類,可以使用`copy()`函數創建一個對象的副本,該對象的某些屬性有所不同。 運作方式如下: ```kt data class User(val name: String, val age: Int) fun main(args: Array<String>) { val u1 = User("John", 29) // using copy function to create an object val u2 = u1.copy(name = "Randy") println("u1: name = ${u1.name}, name = ${u1.age}") println("u2: name = ${u2.name}, name = ${u2.age}") } ``` 運行該程序時,輸出為: ```kt u1: name = John, name = 29 u2: name = Randy, name = 29 ``` * * * ### `toString()`方法 [`toString()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/to-string.html "Kotlin toString()")函數返回對象的字符串表示形式。 ```kt data class User(val name: String, val age: Int) fun main(args: Array<String>) { val u1 = User("John", 29) println(u1.toString()) } ``` 運行該程序時,輸出為: ```kt User(name=John, age=29) ``` * * * ### `hashCode()`和`equals()` `hasCode()`方法返回對象的哈希碼。 如果兩個對象相等,則`hashCode()`產生相同的整數結果。 **推薦閱讀**: [`hashCode()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/hash-code.html "Kotlin hashCode()") 如果兩個對象相等(具有相同的`hashCode()`),則`equals()`返回`true`。 如果對象不相等,則`equals()`返回`false`。 **推薦閱讀**: [`equals()`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/equals.html "Kotlin equals()") ```kt data class User(val name: String, val age: Int) fun main(args: Array<String>) { val u1 = User("John", 29) val u2 = u1.copy() val u3 = u1.copy(name = "Amanda") println("u1 hashcode = ${u1.hashCode()}") println("u2 hashcode = ${u2.hashCode()}") println("u3 hashcode = ${u3.hashCode()}") if (u1.equals(u2) == true) println("u1 is equal to u2.") else println("u1 is not equal to u2.") if (u1.equals(u3) == true) println("u1 is equal to u3.") else println("u1 is not equal to u3.") } ``` 運行該程序時,輸出為: ```kt u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1 is equal to u2. u1 is not equal to u3. ``` * * * ### 解構聲明 您可以使用[解構聲明](https://kotlinlang.org/docs/reference/multi-declarations.html "Kotlin Destructing Declaration")將對象分解為多個變量。 例如: ```kt data class User(val name: String, val age: Int, val gender: String) fun main(args: Array<String>) { val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") } ``` 運行該程序時,輸出為: ```kt name = John age = 29 gender = Male ``` 這是可能的,因為編譯器會為數據類生成`componentN()`函數的所有屬性。 例如: ```kt data class User(val name: String, val age: Int, val gender: String) fun main(args: Array<String>) { val u1 = User("John", 29, "Male") println(u1.component1()) // John println(u1.component2()) // 29 println(u1.component3()) // "Male" } ``` 運行該程序時,輸出為: ```kt John 29 Male ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看