Sollten bei der Überschreibung der equals-Methode in einer Datenklasse die Felder der Basisklasse berücksichtigt werden?
sobes.tech KI
Antwort von AI
In Kotlin generiert eine data class automatisch die Methoden equals, hashCode und toString, wobei nur die in der Klasse selbst deklarierten Eigenschaften berücksichtigt werden. Wenn Ihre Klasse von einer Basisklasse mit eigenen Feldern erbt, werden diese Felder standardmäßig nicht in den Vergleich einbezogen.
Wenn die Vergleichslogik die Felder der Basisklasse berücksichtigen soll, ist es ratsam, die Methode equals manuell zu überschreiben, indem Sie super.equals(other) aufrufen und die Überprüfung der Felder der Basisklasse hinzufügen. Andernfalls, wenn die Basisklasse keine relevanten Daten für den Vergleich enthält, können Sie sich auf die generierte Methode verlassen.
Beispiel für die Überschreibung von equals unter Berücksichtigung der Basisklasse:
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()
}
Berücksichtigen Sie also die Felder der Basisklasse in equals, wenn diese für die Vergleichslogik der Objekte wichtig sind.