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

lazy и var

Вопрос

Можно ли написать var config by lazy { load() }?

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

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

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

Коротко

Правильный ответ: Нет: lazy даёт только getValue, нужен val. Делегат для var должен уметь setValue, а Lazy предоставляет только getValue.

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

  1. Нет: lazy даёт только getValue, нужен valправильный ответ
  2. Да, повторное присваивание просто заменит значение
  3. Да, но только внутри object или companion
  4. Нет, потому что lazy работает только с примитивами

Разбор

Делегат для var должен уметь setValue, а Lazy предоставляет только getValue. Поэтому by lazy применим только к val. Для изменяемого свойства с отложенной инициализацией есть lateinit var или Delegates.notNull(). С типами lazy не ограничен.

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

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