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