Выбор ответа Middle ViewModel и сохранение состояния обновлено

Зачем нужна фабрика ViewModel

Вопрос

У ViewModel есть параметр конструктора repo: Repository. Что нужно, чтобы by viewModels() её создал?

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

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

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

Коротко

Правильный ответ: Фабрика (viewModelFactory { }) или DI вроде @HiltViewModel. Стандартная фабрика умеет вызывать только конструктор без параметров (или с SavedStateHandle/Application).

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

  1. Ничего: провайдер передаст null, а репозиторий подставится позже
  2. Сделать параметр lateinit и присвоить репозиторий после создания
  3. Фабрика (viewModelFactory { }) или DI вроде @HiltViewModelправильный ответ
  4. Объявить ViewModel abstract, и провайдер сгенерирует наследника

Разбор

Стандартная фабрика умеет вызывать только конструктор без параметров (или с SavedStateHandle/Application). Для своих параметров нужна своя фабрика либо Hilt/Koin, которые создают её автоматически. null в non-null параметр не передать, а lateinit к параметрам конструктора не применяется.

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

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

Термины по теме