Πρέπει να λαμβάνονται υπόψη τα πεδία της βασικής κλάσης κατά την υπεράσπιση της μεθόδου 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 αν είναι σημαντικά για τη λογική σύγκρισης των αντικειμένων.