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

Делегирование интерфейса через by

Вопрос

Что делает class Logged(inner: Repo) : Repo by inner?

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

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

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

Коротко

Правильный ответ: Генерирует методы Repo, переадресующие вызовы inner. Это делегирование реализации интерфейса: компилятор создаёт методы, которые вызывают inner.

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

  1. Наследует класс объекта inner со всеми его методами
  2. Делает inner ленивым: он создастся при первом вызове
  3. Генерирует методы Repo, переадресующие вызовы innerправильный ответ
  4. Копирует поля inner в Logged при создании объекта

Разбор

Это делегирование реализации интерфейса: компилятор создаёт методы, которые вызывают inner. Переопределяете только то, что нужно изменить, например добавить лог в save. Наследования от класса inner нет, полей он не копирует, ленивости тоже нет. Так удобно делать декораторы.

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

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