В Kotlin data-классы автоматически генерируют геттеры для всех свойств конструктора, и эти геттеры нельзя напрямую переопределить. Однако есть несколько практических способов обойти это ограничение.
Определи дополнительное свойство с собственным геттером рядом с оригинальным. Это оставляет data-класс нетронутым, но позволяет отдавать преобразованные значения:
data class User(val value: Int) {
val safeValue: Int get() = if (value < 0) 0 else value
}
value остаётся без измененийsafeValue применяет собственную логику при доступеИспользуй init-блок или выражения в параметрах по умолчанию, чтобы изменить значение до его сохранения:
data class User(val value: Int) {
init {
require(value >= 0) { "Value must be non-negative" }
}
}
Если нужен полный контроль над геттерами, рассмотри замену data-класса на обычный класс:
class User(value: Int) {
val value: Int = if (value < 0) 0 else value
}
copy(), equals(), hashCode() и toString()Рекомендуемый подход зависит от твоей ситуации:
init-блок для валидацииВ Kotlin data-классах ты можешь напрямую переопределить автоматически сгенерированный getter для свойства конструктора, определив пользовательский блок get() в объявлении свойства.
Новый — ещё не проверен сообществом
Вы