tgoop.com/kotlin_lib/526
Create:
Last Update:
Last Update:
🧨 equals() в Kotlin: незаметная ловушка, которая бьёт по бизнес-логике
Когда equals() работает не так, как ты думаешь — начинается отладочный ад. Особенно, если ты используешь data class и полагаешься на их auto-generated equals.
Представь кейс: ты получаешь DTO из API и кладёшь его в Set, надеясь, что дубликаты не появятся. Но через минуту замечаешь, что одинаковые по сути объекты спокойно живут рядом. Почему?
📌 Типичная ошибка — включать в equals()/hashCode() поля, которые не участвуют в "бизнесовой" идентичности объекта. Например:
data class Product(
val id: String,
val name: String,
val lastUpdated: Long // техническое поле
)
Добавь два продукта с одинаковым
id, но разным lastUpdated — и Set посчитает их разными.equals() и hashCode(), вручную указав, какие поля важны:
data class Product(
val id: String,
val name: String,
val lastUpdated: Long
) {
override fun equals(other: Any?) =
other is Product && other.id == id
override fun hashCode() = id.hashCode()
}
🔥 Если используешь
copy() — помни, что он тащит все поля. И если ты потом сравниваешь объекты по equals(), может случиться сюрприз.✅ Вывод: auto-generated
equals() удобен, но не всегда безопасен. Если объект участвует в коллекциях, кэшах или логике сравнения — контролируй его равенство вручную.✍️ @kotlin_lib

