Junior — Middle
Pri prepisovaní metódy equals v dátovej triede je potrebné brať do úvahy polia základnej triedy?
sobes.tech AI
Odpoveď od AI
V Kotlin-e, data class automaticky generuje metódy equals, hashCode a toString, pričom uzima u obzir len vlastnosti deklarované v samotnej triede. Ak vaša trieda dedí od základnej triedy s vlastnými poľami, tieto polia sa štandardne nezapočítavajú do porovnania.
Ak logika porovnania má brať do úvahy polia základnej triedy, odporúča sa ručne prepísať metódu equals, volaním super.equals(other) a pridaním kontroly poľ základnej triedy. Inak, ak základná trieda neobsahuje relevantné dáta pre porovnanie, môžete sa spoľahnúť na generovanú metódu.
Príklad prepísania equals s ohľadom na základnú triedu:
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()
}
Preto, ak sú polia základnej triedy dôležité pre logiku porovnania objektov, je potrebné ich zahrnúť do equals.