Kotlin – Полезность «вычисленных» свойств var?

Я заметил, что когда у меня есть свойство var с пользовательским get , которое не использует идентификатор field , в любом случае создается фоновое поле. Я проверил байт-код, и в документации также говорится:

Для свойства будет создано поле поддержки, если оно использует реализацию по умолчанию, по крайней мере, одного из аксессуаров , или если пользовательский аксессор ссылается на него через идентификатор поля.
(акцент мой)

Рассмотрим такой класс. Поскольку это свойство var , будет создан set умолчанию (и, следовательно, поле поддержки):

 class Banana { var ripeness = 1 var color: String = "green" get() = when { ripeness > 80 -> "brown" ripeness > 50 -> "yellow" else -> "green" } } val b = Banana() b.color = "blue" println(b.color) 

Однако println всегда будет печатать «зеленый», независимо от того, для чего я настроил color . В любом случае для поля поддержки будет установлено значение «синий».
Поскольку нет доступа к нему за пределами методов доступа (или через отражение), я действительно не могу придумать причину этого.
Я что-то упустил? Может быть, usecase или другой способ доступа к фоновому полю? Или это просто ошибка (или отсутствие предупреждения в IntelliJ)?

Solutions Collecting From Web of "Kotlin – Полезность «вычисленных» свойств var?"

«Вычисленное» свойство var с используемым полем поддержки должно быть «вычисленным» значением val .

Если вы не собираетесь использовать поле поддержки в своем примере, тогда Banana.color не должен быть var а val . например:

 class Banana { var ripeness = 1 val color: String get() = when { ripeness > 80 -> "brown" ripeness > 50 -> "yellow" else -> "green" } } 

С другой стороны, если вы действительно хотели сделать свое «вычисленное» свойство переопределяемым в некоторых случаях, вам нужно будет использовать поле поддержки. например:

 class Banana { var ripeness = 1 var color: String = "green" get() = when { ripeness > 80 -> "brown" ripeness > 50 -> "yellow" else -> field } }