Назад к вопросам
Middle
192
questionbank

Что такое 'lazy' и 'lateinit' в Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

lazy - делегат свойства для отложенной инициализации неизменяемых (read-only) свойств (val). Значение вычисляется при первом обращении к свойству и затем кэшируется.

//  Пример использования lazy
val lazyValue: String by lazy {
    println("Инициализация") //  будет выведено только один раз при первом обращении
    "Привет, lazy!"
}

lateinit - модификатор для изменяемых (mutable) свойств (var), который позволяет отложить инициализацию до момента первого доступа. Свойство должно быть не-nullable. Использование свойства до инициализации приводит к UninitializedPropertyAccessException.

//  Пример использования lateinit
lateinit var lateinitVariable: String

fun initializeVariable() {
    lateinitVariable = "Привет, lateinit!"
}

fun useVariable() {
    //  Проверка инициализации перед использованием (опционально, но рекомендуется)
    if (::lateinitVariable.isInitialized) {
        println(lateinitVariable)
    } else {
        println("Переменная еще не инициализирована")
    }
}

Основные отличия:

Особенность lazy lateinit
Тип свойства val (read-only) var (mutable)
Nullability Может быть nullable или non-nullable Должно быть non-nullable
Инициализация Автоматическая, при первом доступе Ручная
Отложенность Да, вычисление при первом доступе Да, объявление без инициализации
Потокобезопасность По умолчанию потокобезопасен (синхронизация), есть опции Не гарантируется, зависит от контекста
Исключение при доступе до инициализации Нет, инициализируется автоматически UninitializedPropertyAccessException