Оё бояд полҳои синфи асосиро ҳангоми навиштани усули equals дар data class ба назар гирифт?
sobes.tech AI
Ҷавоб аз AI
Дар Kotlin, data class автоматӣ истеҳсол мекунад методҳои equals, hashCode ва toString, ки танҳо хусусиятҳое, ки дар класи худ эълон шудаанд, ба назар мегиранд. Агар класи шумо аз класи асосӣ бо майдонҳои худ мерос гирад, ин майдонҳо дар муқоиса ба таври пешфарз иштирок намекунанд.
Агар логикаи муқоиса бояд майдонҳои класи асосиро дар назар гирад, тавсия дода мешавад, ки методи equals-ро дастӣ нависед, бо даъвати super.equals(other) ва илова кардани санҷиши майдонҳои класи асосӣ. Дар акси ҳол, агар класи асосӣ маълумоти муҳим барои муқоиса надошта бошад, ба методи тавлидшуда такя кардан мумкин аст.
Масалан, навиштани equals бо дар назар гирифтани класи асосӣ:
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()
}
Аз ин рӯ, агар майдонҳои класи асосӣ барои логикаи муқоиса муҳим бошанд, онҳоро дар equals ба назар гирифтан лозим аст.