> Как создать переменную в дата классе 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() вручную.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью