Junior — Middle
Da li treba uzeti u obzir polja osnovne klase prilikom prepisivanja metode equals u data class?
sobes.tech АИ
Одговор од АИ
U Kotlin-u, data class automatski generiše metode equals, hashCode i toString, uzimajući u obzir samo svojstva deklarisana u samoj klasi. Ako vaša klasa nasleđuje od osnovne klase sa sopstvenim poljima, ta polja po default-u nisu uključena u poređenje.
Ako logika poređenja treba da uzme u obzir polja osnovne klase, preporučljivo je ručno prepisati metodu equals, pozivajući super.equals(other) i dodajući proveru polja osnovne klase. U suprotnom, ako osnovna klasa ne sadrži relevantne podatke za poređenje, možete se osloniti na generisanu metodu.
Primer prepisivanja equals sa uzimanjem u obzir osnovne klase:
open class Base(val id: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Base) return false
return id == other.id
}
override fun hashCode() = id
}
data class Derived(val name: String) : Base(0) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Derived) return false
if (!super.equals(other)) return false
return name == other.name
}
override fun hashCode() = super.hashCode() * 31 + name.hashCode()
}
Dakle, uzimajte u obzir polja osnovne klase u equals ako su važna za logiku poređenja objekata.