Java&Groovy&Scala&Kotlin-18.Dataクラス(Kotlin)

1799 ワード

Overview
  • Dataクラスはキーワード使用data宣言されたクラス
  • Dataクラスデフォルトは構築方法に基づいて実現しているtoString(),componentN(),copy(),equals()およびhashCode()方法は、構築方法で定義されていない属性はtoString()結果には生じない.
  • Dataクラスはそのまま使用可能==比較を行い、同様に構築方法で定義されていない属性は比較には使用されない
  • Dataクラスはデータのみを表し、動作を持つことができないため、通常はDataクラスのクラス体を構築する必要はない
  • Dataクラスの定義
    ほとんどの場合、クラスを構築する必要はないので、括弧は省略します
    data class Customer(var name: String, var email: String, var friends: ArrayList)
    
    Dataクラスの使用
    オブジェクトの作成
    val peter = Customer("Peter", "[email protected]", arrayListOf("Jane", "Tom"))
    
    オブジェクトのコピー
    Data classはデフォルトで実装されているcopy()属性のコピーが可能で、このコピーは浅いコピーのみ
    val tom = peter.copy()
    val jane = peter.copy(name = "")
    peter.friends.add("Tina")
    
    println(peter)  //  Customer(name=Peter, [email protected], friends=[Jane, Tom, Tina])
    println(tom)    //  Customer(name=Peter, [email protected], friends=[Jane, Tom, Tina])
    println(jane)   //  Customer(name=, [email protected], friends=[Jane, Tom, Tina])
    
    以上の例では、peterfriendsリストを修正した後janetomfriendsリストも変更され、コピーされたのは参照のみであり、値そのものではないことを証明しています.
    ComponentN
    オブジェクトからの対応する属性値の抽出
    data class Customer(var name: String, var email: String, var friends: ArrayList)
    val peter = Customer("Peter", "[email protected]", arrayListOf("Jane", "Tom"))
    
    //     
    val (name, email) = peter
    println("name=$name,email=$email")
    
    文章のソースを参照https://github.com/SidneyXu/JGSK 倉庫のkotlin/_18_data_class小節