Junior — Middle
A hashCode metódusban egy adat osztályon belül deklarált mező van-e használatban?
sobes.tech MI
Válasz az MI-től
Kotlinban a data class-hez a fordító automatikusan generálja a hashCode(), equals(), toString() metódusokat, valamint a copy() és destrukturálási komponenseket. A hashCode() metódus az összes, a data class fő konstruktorában deklarált tulajdonságon alapul (azaz, a név után megadottakon).
Ha a data class-on belül egy további mezőt deklarálunk a fő konstruktoron kívül, az nem vesz részt a hashCode() és equals() számításában. Ez azért van, mert ezek a metódusok csak a konstruktorban deklarált tulajdonságokat veszik figyelembe, hogy helyes összehasonlítást és hash-elést biztosítsanak az objektumok fő adatok alapján.
Példa:
data class User(val id: Int, val name: String) {
var age: Int = 0 // nem vesz részt a hashCode-ban és az equals-ben
}
fun main() {
val user1 = User(1, "Alice")
val user2 = User(1, "Alice")
user1.age = 25
user2.age = 30
println(user1 == user2) // true, mivel az életkor nem számít
println(user1.hashCode() == user2.hashCode()) // true
}