Чем отличается использование Lazy от Provider в Dagger при внедрении зависимостей?

В Dagger Lazy и Provider используются для отложенного получения зависимостей, но имеют разные особенности:

Короткий ответ

Что ответить на собеседовании

В Dagger Lazy и Provider используются для отложенного получения зависимостей, но имеют разные особенности:

Подробный разбор

Ответ с пояснениями

В Dagger Lazy и Provider используются для отложенного получения зависимостей, но имеют разные особенности:

  • Lazy<T> — предоставляет объект типа T при первом вызове get(), после чего возвращает тот же экземпляр (кеширует результат). Используется, когда нужно отложить создание объекта до первого использования, но при этом гарантировать единственный экземпляр.
  • Provider<T> — при каждом вызове get() создает новый экземпляр объекта T. Используется, когда требуется получить новый объект каждый раз.

Пример:

class MyClass @Inject constructor(
    private val lazyDependency: Lazy<Dependency>,
    private val providerDependency: Provider<Dependency>
) {
    fun useLazy() {
        val instance1 = lazyDependency.get()
        val instance2 = lazyDependency.get() // instance1 == instance2
    }

    fun useProvider() {
        val instance1 = providerDependency.get()
        val instance2 = providerDependency.get() // instance1 != instance2
    }
}

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку