Ответ
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