Надеюсь, вы не кладете лямды напрямую в
data class, а если кладете, то делаете это правильно!
val detective1 = DetectiveDataClass(
name = "Sherlock",
age = 40,
alias = "Holmes",
onDetectiveAlert = { println("Elementary!") }
)
val detective2 = DetectiveDataClass(
name = "Sherlock",
age = 40,
alias = "Holmes",
onDetectiveAlert = { println("Elementary!") }
)
println(detective1 == detective2)
// false, хотя ожидается true
println(detective1.hashCode() == detective2.hashCode())
// false, хотя ожидается true
Сравнивая два одинаковых
data class’а, получаем неожиданный результатА исправить можно вот так:
👉 Переопределяем
equals и hashCode для этого класса. Не оптимально 👉 Используем
method reference
val detective1 = DetectiveDataClass(
name = "Sherlock",
age = 40,
alias = "Holmes",
onDetectiveAlert = ::alertFunction
)
👉 Используем интерфейс и передаем полноценный объект внутрь
Лучше всего, конечно, вынести лямду куда подальше от
data class