TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #136 1.15K
Делегат свойства в Kotlin.

В Kotlin есть конструкция, которой нет в JVM:
var name by NameDelegate() // в JVM такого нет


Под капотом компилятор превращает все это в такую штуку:
// по сути в JVM нет такого поля как name, вместо этого создается объект делегата
final NameDelegate name$delegate = new NameDelegate();

// дополнительное поле которое хранит данные о свойствах, заполняется при конструировании объекта, нужно чтобы различать несколько свойств
private static final KProperty[] $$delegatedProperties;

final String getName() {
// данные о свойстве достаются просто по индексу
return name$delegate.getValue(
this,
$$delegatedProperties[0]
)
}

final void setName(String name) {
name$delegate.setValue(
this,
$$delegatedProperties[0],
name
)
}


Получается что работа со свойством просто передается другому объекту, то есть делегируется, отсюда и название "делегат".

Сам по себе делегат выглядит так:
class NameDelegate {

// operator говорит компилятору что это специальная функция, которая используется в синтаксисе языка (by)
operator fun getValue(
thisRef: User,
property: KProperty<*>
): String {
return "Volga GAZ 21"
}

operator fun setValue(
thisRef: User,
property: KProperty<*>,
value: String
) {}
}


Для делегатов свойств которые не меняются (val) setValue() не переопределяется.
  • 👍 19
  • 🔥 4
More from @android_under_the_hood
  1. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  2. Oct 2, 2026Kotlin lambdas, часть I. До версии Kotlin 2.0 лямбды компилировались в анонимные классы, р…
  3. Sep 23, 2026val vs var под капотом. На уровне Kotlin все просто: val x = 10 var y = 20 y = 30 // компи…
  4. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  5. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
  6. Jan 18, 2026Пару фактов о Go, часть I. 1) Нет объектов и классов, только структуры и функции. Если сра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →