Bir data class'ta equals metodunu geçersiz kılarken temel sınıfın alanlarını dikkate almak gerekir mi?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de, data class otomatik olarak equals, hashCode ve toString metodlarını, yalnızca sınıf içinde bildirilen özellikleri dikkate alarak üretir. Eğer sınıfınız, kendi alanlarına sahip temel bir sınıftan türemişse, varsayılan olarak bu alanlar karşılaştırmaya katılmaz.
Karşılaştırma mantığının temel sınıfın alanlarını dikkate alması gerekiyorsa, equals metodunu manuel olarak geçersiz kılmak ve super.equals(other) çağrısı yapıp temel sınıfın alanlarını kontrol etmek iyi olur. Aksi takdirde, temel sınıf karşılaştırma için anlamlı olmayan verilere sahipse, otomatik üretilen metoda güvenebilirsiniz.
İşte temel sınıf dikkate alınarak equals metodunun nasıl geçersiz kılınacağına dair bir örnek:
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()
}
Yani, nesne karşılaştırma mantığında temel sınıfın alanlarını önemliyse, equals içinde dikkate alın.