Ответ
В Kotlin можно использовать backing field (field) для базовой реализации свойства:
var property: String = "default"
get() = field
set(value) {
field = value
}
Или с дополнительной логикой:
var counter: Int = 0
set(value) {
if (value >= 0) {
field = value
}
}
Для вычисляемых свойств без backing field:
val isEmpty: Boolean
get() = size == 0
Backing field генерируется автоматически, если используется хотя бы один аксессор по умолчанию или если в кастомном аксессоре есть обращение к field.