【Kotlin/Android Studio】data classとは?クラスとの違いと使い方
この記事からわかること
- Android Studio/Kotlinでdata classの使い方
- 普通のクラスとの違い
- 自動生成されるメソッド
- copyやcomponentN、equalsの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
data classとは?
Kotlinのdata classとはデータを扱うことに特化したクラスのことです。data
マークをつけるだけでデータクラスにすることが可能です。
data class User(val name: String, val age: Int)
data classにすることでインスタンスの比較やコピーなどする機能が自動で生成されます。これにより普通のクラスよりよりデータとして扱いやすくなります。
普通のクラスとの違い
通常のクラスとの違いは自動で生成される機能があるかないかです。data classで自動生成されるクラスは以下の通りです。
- .equals():オブジェクト同士が同じかどうか
- .hashCode():オブジェクトのハッシュコード
- .toString():文字列表現を返す
- .componentN():N番目のプロパティを返す
- .copy():コピー
上記の中でequals
/hashCode
/toString
に関してはAny
クラスの持つメソッドなので普通のクラスも使用することができます。
componentN
/copy
はdata classに自動実装されるクラスです。
実装条件
data classを実装するためには以下の条件を満たしている必要があります。
- プライマリコンストラクターには少なくとも1つのパラメーターが必要
- パラメーターはvar/valで定義
- データクラスを抽象クラス、openクラス、sealedクラス、インナークラスにしてはいけない
使用例
data class User(val name: String, val age: Int)
class UserClass {
constructor(name: String,age: Int){
this.name = name
this.age = age
}
var name: String = ""
var age: Int = 0
}
d_user.equals(d_user)
d_user.hashCode()
d_user.toString()
d_user.component1()
d_user.component2()
d_user.copy()
c_user.equals(c_user)
c_user.hashCode()
c_user.toString()
copyメソッドの使い方
copy
メソッドはオブジェクトをコピーできます。引数にプロパティ値を渡すと一部だけを上書きしてコピーすることも可能です。
val ame = User(name = "ame", age = 25)
val olderAme = ame.copy(age = 26)
分割宣言
data classの中身を分割して変数に格納することも可能です。
val (name, age) = ame
println("$name, $age years of age")
PairとTriple
data classの仲間としてPair
とTriple
が定義されています。
Pair("ame", 27)
Triple("ame",27,175)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。