Middle
Какво са 'lazy' и 'lateinit' в Kotlin?
sobes.tech AI
Отговор от AI
lazy - делегат на свойство за отложена и неизменяема (val) инициализация. Стойността се изчислява при първия достъп до свойството и след това се кешира.
// Пример за използване на lazy
val lazyValue: String by lazy {
println("Инициализация") // ще се изпише само веднъж при първия достъп
"Здравей, lazy!"
}
lateinit - модификатор за променливи (var) свойства, който позволява отлагане на инициализацията до първия достъп. Свойството трябва да бъде non-null. Използването на свойството преди инициализация води до UninitializedPropertyAccessException.
// Пример за използване на lateinit
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Здравей, lateinit!"
}
fun useVariable() {
// Проверка дали е инициализирана преди употреба (по желание, препоръчително)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Променливата все още не е инициализирана")
}
}
Основни разлики:
| Особеност | lazy |
lateinit |
|---|---|---|
| Тип на свойството | val (само за четене) |
var (променлива) |
| Nullability | Може да бъде nullable или non-nullable | Трябва да бъде non-nullable |
| Инициализация | Автоматична, при първи достъп | Ръчна |
| Отлагане на инициализация | Да, при първи достъп | Да, декларация без инициализация |
| Потокобезопасност | По подразбиране потокобезопасен (синхронизация), има опции | Не е гарантирано, зависи от контекста |
| Изключение при достъп преди инициализация | Не, автоматично се инициализира | UninitializedPropertyAccessException |