0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【kotlin】データクラス

Posted at

■データクラス

処理を持たないデータだけを保持するクラス

classの前にdataをつける
{}はいらない処理を持たないので(書く事もできる。)
コンストラクタで変数を持たせる。
定数だけを持たせるクラスになる。

 data class Hoge(val name: String, val age: Int)

■データクラスを定義する条件

●コンストラクタが1つ以上の引数を持つ
●コンストラクタの引数は全てvar/valを付与してプロパティの宣言とする。
●abstrct/open/sealed/innerにすることはできない。

■equalsメソッド

同値性のチェック
違うインスタンス同士でコンストラクタの値が同じ
中身のnum の変数は違う
この条件でもコンストラクタの値が同じならequalsメソッドでtrueになる。

data class Hoge(var name:String = "") {
 var num:Int = 0
}

val a = Hoge("マイケル")
a.num = 40
val b = Hoge("マイケル")
b.num = 50

println(a == b) //結果:true

■toStringメソッド

▼文字列表現
println関数を使ったら暗黙的に呼び出される。

▼データクラスのオブジェクトを文字列化すると
「データクラス名(プロパティ=値)」
というように出力される。

つまりprintinでデータクラスを定義すると文字列化され
「データクラス名(プロパティ=値)」
というように出力される。

data class Hoge(var name:String = "") {
 var num:Int = 0
}

val a = Hoge("マイケル")
a.num = 40
//コンストラクタがIntでも同じ
println(a) //結果 : Hoge(name=マイケル)

equalsメソッドとtoStringメソッドもコンストラクタで定義された値のみを
対象としている。

■データクラスに定義されたメソッドは
 コンストラクタで定義されたプロパティのみ対象にしている。

■componentN(分割代入)

プロパティの値を個々の変数に分解する。

val a = Hoge("マイケル","所長","28")
val (name,job,age) = a

//結果
name=マイケル
job=所長
age=28

内部的には以下のようになっている
componennt1等の数字の部分は引数の順番になっている。

val a = Hoge("マイケル","所長","28")
val name = a.component1()
val job = a.component2()
val age = a.component3()

データクラスにはcomponentNが実装されている。
分割代入が可能

data class(val name:String, val job:String, val age:Int)
val a = Hoge("マイケル","所長","28")
val (name,job,age) = a
printin(age) //28

■copy(オブジェクトの複製)

特定のプロパティの値だけを変更してコピーしている。

data class(val name:String, val job:String, val age:Int)
val a = Hoge("マイケル","所長","28")
//特定のプロパティの値だけを変更している。
val b = a.copy(age=40)
println(b)
//結果: Hoge(name=マイケル,job=所長,age=40)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?