Java&Groovy&Scala&Kotlin-18.Dataクラス(Kotlin)
1799 ワード
Overview Dataクラスはキーワード使用 Dataクラスデフォルトは構築方法に基づいて実現している Dataクラスはそのまま使用可能 Dataクラスはデータのみを表し、動作を持つことができないため、通常はDataクラスのクラス体を構築する必要はない Dataクラスの定義
ほとんどの場合、クラスを構築する必要はないので、括弧は省略します
オブジェクトの作成
Data classはデフォルトで実装されている
ComponentN
オブジェクトからの対応する属性値の抽出
data
宣言されたクラスtoString()
,componentN()
,copy()
,equals()
およびhashCode()
方法は、構築方法で定義されていない属性はtoString()
結果には生じない.==
比較を行い、同様に構築方法で定義されていない属性は比較には使用されないほとんどの場合、クラスを構築する必要はないので、括弧は省略します
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])
以上の例では、peter
のfriends
リストを修正した後jane
とtom
のfriends
リストも変更され、コピーされたのは参照のみであり、値そのものではないことを証明しています.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
小節