Выбор ответа Senior Делегаты обновлено
Что нужно для своего делегата свойства
Вопрос
Что минимально нужно объекту, чтобы его можно было использовать в var x: String by MyDelegate()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Операторы getValue(thisRef, property) и setValue(..., value). Делегирование свойств работает по соглашению об операторах: для val нужен getValue, для var ещё и setValue, с параметрами thisRef и property: KProperty<.
Варианты ответа
- Унаследоваться от абстрактного класса
Delegate<String> - Реализовать интерфейс
Lazy<String>и его методvalue - Операторы
getValue(thisRef, property)иsetValue(..., value)правильный ответ - Иметь аннотацию
@Delegateна классе делегата
Разбор
Делегирование свойств работает по соглашению об операторах: для val нужен getValue, для var ещё и setValue, с параметрами thisRef и property: KProperty<*>. Интерфейсы ReadOnlyProperty и ReadWriteProperty помогают не ошибиться в сигнатурах, но не обязательны. Базового класса Delegate и аннотации @Delegate в Kotlin нет, Lazy только для val.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.