Назад к вопросам
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), то методы генерируются автоматически.