Junior — Middle
Wenn man eine Datenklasse in Kotlin erstellt, die von einer anderen Klasse erbt, werden die Methoden hashCode und equals automatisch überschrieben oder müssen sie manuell implementiert werden?
sobes.tech KI
Antwort von 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), то методы генерируются автоматически.