data classとは
KotlinにはJavaと違い、data classというものが存在する。
通常のクラスと違い、getter/setterが自動で生成されるようなイメージのもの
以下のように定義する。
data class Person(
val name: String,
val age: Int,
var address: String
)
利用するときは以下のようなイメージ
class main(){
val myPerson = Person("hogehoge", 20, "東京都fugafuga") // Person(name = "hogehoge", age = 20, address = "東京都fugafuga")という書き方も可
val tmpName = myPerson.name
myPerson.address = "神奈川県piyopiyo"
}
尚上の例の場合は、name,ageはvalで定義しているため値の代入ができない。(Setterもない)
addressはvarで定義しているためSetterがあり、値の代入が可能。
data classの制限
Kotlinのdata classは他のクラスを継承することができない仕様になっている。
そのため、data classを継承して項目を追加するようなことができない。
解決方法(?)
data classは継承ができないため以下のような方法で解決する。
interface Person{
val name: String
val age: Int
var address: String
}
data class ExtendPerson(
override val name: String,
override val age: Int,
override var address: String = "",
var tel: String? = null
):Person
若干不格好だけど、こんな感じで継承してプロパティの追加が可能。