Sobes.tech
Назад к вопросам
Junior — Middle
67

Стоит ли учитывать поля базового класса при переопределении метода equals в data class?

Ответ от нейросети

sobes.tech 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, если они важны для логики сравнения объектов.