Closed4
Kotlinのdata classについて調べる
公式ドキュメントによると下記のメソッドが自動生成されるとのこと。
- equals()
- hashCode()
- toString()
- component1(), component2(), ...
- copy()
検証用のソースコードを下記に示します。
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)
ちなみに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便利ですね!
KotlinプレイグラウンドのURL:
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にクローズされました