> Как создать переменную в дата классе Kotlin, которая не участвует в hashCode и equals (Kotlin, Android)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: MTS
Стек: Kotlin, Android
> Пример ответа
В Kotlin Data Class все свойства, объявленные в первичном конструкторе, автоматически участвуют в equals(), hashCode(), toString(), copy() и деструктуризации. Чтобы исключить переменную из этих методов, её нужно вынести за пределы первичного конструктора.
Самый простой способ - объявить свойство внутри тела класса, а не в конструкторе:
data class User(val name: String, val age: Int) { var cachedData: String = "" // не участвует в equals/hashCode }
Если нужно, чтобы свойство всё же инициализировалось через конструктор, но не влияло на равенство, используйте конструктор с параметром, который не является свойством класса:
data class User(val name: String, val age: Int) { var cachedData: String constructor(name: String, age: Int, cachedData: String) : this(name, age) { this.cachedData = cachedData } }
Также можно применить ленивую инициализацию или вычисляемое свойство:
data class User(val name: String, val age: Int) { val fullInfo: String by lazy { "$name ($age)" } // не входит в equals/hashCode }
Важно: Если вы используете такое свойство в toString() (который тоже генерируется автоматически), оно не будет отображено. При необходимости переопределите toString() вручную.
> Похожие задачи по mobile
Какая упорядоченность у Map в Kotlin и существуют ли реализации, сохраняющие порядок элементов
Как реализовать синглтон в Kotlin
Можно ли изменить переменную типа val в Kotlin
Как сравнить два объекта дата класса по значению в Kotlin
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью