KOTLIN_LIB Telegram 526
🧨 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53



tgoop.com/kotlin_lib/526
Create:
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

BY Kotlin




Share with your friend now:
tgoop.com/kotlin_lib/526

View MORE
Open in Telegram


Telegram News

Date: |

You can invite up to 200 people from your contacts to join your channel as the next step. Select the users you want to add and click “Invite.” You can skip this step altogether. To edit your name or bio, click the Menu icon and select “Manage Channel.” Click “Save” ; Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Choose quality over quantity. Remember that one high-quality post is better than five short publications of questionable value.
from us


Telegram Kotlin
FROM American