<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 數據類 官方參考文檔——[類與對象-數據類](http://www.hmoore.net/alex_wsc/android_kotlin/1318306) 在Java程序中,一般會用一些類來保存一些數據或者對象的狀態,習慣上將這些類稱為bean類或entity類或model類。在Kotlin中,專門處理這些數據的類被稱為數據類,用關鍵字data進行標記。數據類的語法格式如下: ``` data class類名([形參1,形參2…]) ``` 上述語法格式中,“類名([形參1,形參2…])”是該類的主構造函數,形參1、形參2…是該函數中需要傳遞的參數。定義一個數據類時,必須注意以下幾點。 數據類的主構造函數至少有一個參數,如果需要一個無參的構造函數,可以將構造函數中的參數都設置為默認值。 * 數據類中的主構造函數中傳遞的參數必須用val或var來修飾。 * 數據類不可以用abstract、open、sealed或inner關鍵字來修飾。 * 在Kotlin 1.1版本之前數據類只能實現接口,1.1版本之后數據類可以繼承其他類。 * 編譯器可以自動生成一些常用方法,如equals()、hashCode()、toString()、componentN()、copy()等,這些方法也可以進行自定義。 Kotlin在類創建方面花了很多心思,讓我們創建類變的非常方便,簡化了代碼。Kotlin為我們提供了一種特定的類,數據類。**在類定義的時候,通過在最前面加上data關鍵字,就可以標明這個類是一個數據類**。**如果一個類被標明為數據類,編譯器在編譯的時候會自動幫我們覆寫常用的toString、hashCode、equals、copy、comopinentX**方法。 * toString方法,方便做日志輸出,非常方便。 * hashCode、equals方法,方便對象比較,非常方便。 * copy方法,方便做對象復制,非常方便。 * comopinentX方法,可以很方面的解析對象包含的變量,非常強大。 比如,我們把包含name屬性和age屬性的Person類,定義為數據類,參考代碼: ~~~ data class PersonData(val name: String, val age: Int) fun main(args: Array<String>) { val person = PersonData("小翠", 18) val person1 = PersonData("小麗", 20) println("--------封裝好了toString方法--------") println(person) println(person1) println("--------封裝好了hashCode和equals方法--------") println("person == person1:${person == person1}") println("person === person1:${person === person1}") println("--------封裝好了copy方法-單純copy--------") val person2 = person1.copy() println(person2.toString()) println("--------封裝好了copy方法-copy的時候改特定的值--------") val person3 = person1.copy("小紅") println(person3.toString()) println("--------封裝好了comopinentx方法-可以進行解析析構--------") val (name, age) = person3 println("name: ${name},age: ${age}") } ~~~ 運行結果 ``` --------封裝好了toString方法-------- PersonData(name=小翠, age=18) PersonData(name=小麗, age=20) --------封裝好了hashCode和equals方法-------- person == person1:false person === person1:false --------封裝好了copy方法-單純copy-------- PersonData(name=小麗, age=20) --------封裝好了copy方法-copy的時候改特定的值-------- PersonData(name=小紅, age=20) --------封裝好了comopinentx方法-可以進行解析析構-------- name: 小紅,age: 20 Process finished with exit code 0 ``` 顯然,數據類可是大大提高了生產力,為了驗證編譯器的生成情況,我們可以查看Kotlin編譯轉換的字節碼文件對應Java文件的Structure,參考截圖: ![](http://upload-images.jianshu.io/upload_images/7368752-d1f71933bdd28bd1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 針對以上代碼的第33行重點去說一下,這種做法,稱作Kotlin的解析析構,可以把一個對象的值賦值給多個變量,要求這個類中包含comopinentX方法,比如,我們這里的Person包含了component1方法和component2方法。對于如下的寫法 ![image.png](http://upload-images.jianshu.io/upload_images/7368752-af9eb738f38ea551.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                  <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>

                              哎呀哎呀视频在线观看