データクラス
実際にアプリを開発する場合、データ(プロパティ)のみを扱うクラスが存在します。
これをデータクラスと言います。
データクラスは以下の条件を満たしていなければいけません。
・data
キーワードをつけること
・プライマリコンストラクターが1つ以上の引数を持っていること
・コンストラクターの引数がvar
またはval
で修飾すること
またabstract
、open
、sealed
、inner
キーワードは使用できません
データクラスを定義することで、自動的に以下のメソッドが準備されます。
equals
、hashCode
、toString
、componentN
、copy
equals
メソッド
「==」演算子によって内部的に呼び出されるメソッドです。
データクラスでは、プライマリコンストラクターで定義されたプロパティが等しい場合、
オブジェクト同士が同値であるとみなします。
入力例:
data class Book(var title:String = ""){
var price = 0
}
fun main(){
val book1 = Book("Kotlin入門")
book1.price = 1000
val book2 = Book("Kotlin入門")
book2.price = 1500
println(book1 == book2)
}
実行結果は以下の通りです。
true
toString
メソッド
インスタンスの文字列表現が要求された時に、呼び出されるメソッドです。
「クラス名(プロパティ=値)」の形式でオブジェクトの内容を出力します。
data class Book(var title:String = ""){
var price = 0
}
fun main(){
val book1 = Book("Kotlin入門")
book1.price = 1000
println(book1)
}
実行結果は以下の通りです。
Book(title=Kotlin入門)
conponentN
メソッド
分割代入をした時に呼び出されるメソッドです。
data class Book(var title:String = "",var price:Int= 0){
}
fun main(){
val book1 = Book("Kotlin入門",1000)
val(title,price) = book1
println(title)
}
実行結果は以下の通りです。
Kotlin入門
copy
メソッド
特定のプロパティだけを変更してオブジェクトの複製を生成できます。
data class Book(var title:String = "",var price:Int= 0){
}
fun main(){
val book1 = Book("Kotlin入門",1000)
val copied = book1.copy(title="Kotlin上級")
println(copied)
}
実行結果は以下の通りです。
Book(title=Kotlin上級, price=1000)