Ответ
by lazy — это ленивая инициализация свойства, которая выполняется только при первом доступе к нему. Это полезно для:
- Оптимизации — если свойство не всегда используется.
- Избежания NPE — если инициализация требует контекста (
this). - Снижения нагрузки при старте приложения.
Пример:
val heavyObject: HeavyClass by lazy {
HeavyClass() // Создаётся только при первом вызове heavyObject
}
Особенности:
- Потокобезопасен по умолчанию (можно изменить через
LazyThreadSafetyMode). - Только для
val(неизменяемые свойства). - Не подходит, если нужно переинициализировать значение.