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

Если создать data class в Kotlin, которая наследуется от другого класса, будет ли автоматически переопределяться методы hashCode и equals или потребуется реализовать их вручную?

Компании, где спрашивали
Viasat tech

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

sobes.tech AI

В Kotlin, если data class наследуется от другого класса (не является прямым наследником Any), то автоматическая генерация методов equals(), hashCode() и toString() не происходит. Это связано с тем, что компилятор не может гарантировать корректность реализации этих методов при наследовании.

Поэтому в такой ситуации вам потребуется реализовать методы equals() и hashCode() вручную, чтобы обеспечить корректное сравнение и хеширование объектов.

Пример:

open class Base(val id: Int)

data class Derived(val name: String, val age: Int) : Base(id = 0) {
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is Derived) return false
        if (!super.equals(other)) return false

        if (name != other.name) return false
        if (age != other.age) return false

        return true
    }

    override fun hashCode(): Int {
        var result = super.hashCode()
        result = 31 * result + name.hashCode()
        result = 31 * result + age
        return result
    }
}

Если data class не наследует никакой пользовательский класс (только Any), то методы генерируются автоматически.