Sobes.tech
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
}