Выбор ответа Senior Делегаты обновлено

Что нужно для своего делегата свойства

Вопрос

Что минимально нужно объекту, чтобы его можно было использовать в var x: String by MyDelegate()?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Операторы getValue(thisRef, property) и setValue(..., value). Делегирование свойств работает по соглашению об операторах: для val нужен getValue, для var ещё и setValue, с параметрами thisRef и property: KProperty<.

Варианты ответа

  1. Унаследоваться от абстрактного класса Delegate<String>
  2. Реализовать интерфейс Lazy<String> и его метод value
  3. Операторы getValue(thisRef, property) и setValue(..., value)правильный ответ
  4. Иметь аннотацию @Delegate на классе делегата

Разбор

Делегирование свойств работает по соглашению об операторах: для val нужен getValue, для var ещё и setValue, с параметрами thisRef и property: KProperty<*>. Интерфейсы ReadOnlyProperty и ReadWriteProperty помогают не ошибиться в сигнатурах, но не обязательны. Базового класса Delegate и аннотации @Delegate в Kotlin нет, Lazy только для val.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.