Closed4

Kotlinのdata classについて調べる

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

公式ドキュメントによると下記のメソッドが自動生成されるとのこと。

  • equals()
  • hashCode()
  • toString()
  • component1(), component2(), ...
  • copy()

https://kotlinlang.org/docs/data-classes.html

検証用のソースコードを下記に示します。

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

fun main() {
    val user1 = User("John", 42)
    val user2 = User("John", 42)
    println(user1)
    println(user1.hashCode())
    println(user2.hashCode())
    println(user1 == user2)
    println(user1.equals(user2))
    println(user1.component1())
    println(user1.component2())
    println(user1.copy(name = "Tatsuya"))
    println(user1.copy(age = 35))
}

実行結果を下記に示します。

User(name=John, age=42)
71750751
71750751
true
true
John
42
User(name=Tatsuya, age=42)
User(name=John, age=35)
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ちなみにdata classではなく普通のclassの場合:

class User(val name: String, val age: Int)

fun main() {
    val user1 = User("John", 42)
    val user2 = User("John", 42)
    println(user1)
    println(user1.hashCode())
    println(user2.hashCode())
    println(user1 == user2)
    println(user1.equals(user2))
    // println(user1.component1()) // エラーになる
    // println(user1.component2()) // エラーになる
    // println(user1.copy(name = "Tatsuya")) // エラーになる
    // println(user1.copy(age = 35)) // エラーになる
}

実行結果:

User@37f8bb67
939047783
1134517053
false
false

data class便利ですね!

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

Data classにもメソッドを定義することができます。

data class User(val name: String, val age: Int) {
    fun greet() {
        println("Hello")
    }
}

fun main() {
    val user = User("John", 42)
    user.greet()
}

実行結果

Hello
このスクラップは2023/01/10にクローズされました