Kotlin поддерживает extension properties (расширяющие свойства), которые позволяют добавлять новые свойства к существующим классам без изменения их исходного кода. Однако они имеют важное структурное ограничение.
Extension properties должны определять пользовательские аксессоры для предоставления своего значения. val extension property требует пользовательского get(), а var extension property требует оба get() и set().
Простой пример:
val String.lastChar: Char
get() = this[length - 1]
Здесь lastChar ведёт себя как обычное свойство у String, но определено снаружи.
Extension properties не могут иметь backing fields. Дело в том, что расширения не модифицируют класс, который они расширяют — они разрешаются статически и не имеют доступа к внутреннему хранилищу класса.
В результате следующее недопустимо:
var String.lastChar: Char = ' ' // ❌ Ошибка компиляции — backing field не допускается
Extension properties в Kotlin могут иметь backing fields, если они объявлены как var с обоими accessors get() и set().
Новый — ещё не проверен сообществом
Вы