Ответ
Если data class наследуется от другого класса, он не будет автоматически генерировать equals(), hashCode(), toString() и copy(), если родительский класс объявлен как open или abstract и имеет нефинальные (final в Java) реализации этих методов. Kotlin требует, чтобы родительские методы были final для корректной генерации.
open class Parent {
open fun equals(other: Any?) = super.equals(other) // Нефинальный метод
}
data class Child(val x: Int) : Parent() // Не сгенерирует equals/hashCode!
Решение:
- Сделать родительские методы
final(если возможно). - Вручную переопределить
equals/hashCodeвdata class. - Использовать композицию вместо наследования.