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: |

The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously. With the “Bear Market Screaming Therapy Group,” we’ve now transcended language. Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from us


Telegram Kotlin
FROM American