Ответ
При переопределении equals() нужно соблюдать контракт:
- Рефлексивность:
x.equals(x)→true - Симметричность:
x.equals(y)==y.equals(x) - Транзитивность: если
x.equals(y)иy.equals(z), тоx.equals(z) - Консистентность: повторные вызовы
equals()должны возвращать одинаковый результат - Ненулевость:
x.equals(null)→false
Пример правильной реализации:
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is MyClass) return false
return field1 == other.field1 && field2 == other.field2
}
Обязательно переопределяйте hashCode(), если переопределяете equals().