Для чего нужен lateinit

«Для чего нужен lateinit» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

lateinit используется для отложенной инициализации non-null переменных. Это позволяет объявить переменную без немедленного присвоения значения, но гарантирует, что перед использованием она будет проинициализирована.

Пример:

class MyClass {
    lateinit var name: String

    fun initializeName() {
        name = "Android" // инициализация позже
    }

    fun printName() {
        if (::name.isInitialized) { // проверка инициализации
            println(name)
        }
    }
}

Когда использовать:

  • Для зависимостей, инициализируемых через DI (например, Dagger)
  • Для переменных, инициализируемых в onCreate() или других lifecycle-методах
  • Когда невозможно/нежелательно инициализировать переменную сразу в конструкторе

Ограничения:

  • Работает только с var (не с val)
  • Нельзя использовать с примитивными типами (Int, Boolean и т.д.)
  • При доступе к неинициализированной переменной выбрасывается UninitializedPropertyAccessException