Data class-da equals metodunu yeniləyərkən əsas sinifin sahələrini nəzərə almaq lazımdırmı?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də, data class avtomatik olaraq equals, hashCode və toString metodlarını yaradır, yalnızca sinifdə elan olunan xüsusiyyətləri nəzərə alaraq. Əgər sinfiniz əsas sinifdən miras alıb və onun öz sahələri varsa, bu sahələr standart olaraq müqayisədə iştirak etmir.
Əgər müqayisə məntiqi əsas sinifin sahələrini nəzərə almalıdırsa, equals metodunu əl ilə yenidən yazmaq və super.equals(other) çağırmaq və əsas sinifin sahələrini yoxlamaq tövsiyə olunur. Əks halda, əgər əsas sinif müqayisə üçün əhəmiyyətli məlumatlar içermirsə, avtomatik yaradılmış metoda güvənə bilərsiniz.
Əsas sinfi nəzərə alaraq equals metodunun necə yenidən yazılacağına nümunə:
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()
}
Yəni, obyektlərin müqayisə məntiqində əsas sinfin sahələri vacibdirsə, equals daxilində nəzərə alın.