Middle
Kas ir 'lazy' un 'lateinit' Kotlin?
sobes.tech AI
Atbilde no AI
lazy - tas ir īpašības deleģāts atlikšanai un nemainīgām (tikai lasāmajām) īpašībām (val). Vērtība tiek aprēķināta pirmo piekļuvi īpašībai un pēc tam kešota.
// Lazy izmantošanas piemērs
val lazyValue: String by lazy {
println("Iniciācija") // tiks izvadīts tikai vienu reizi pirmajā piekļuvē
"Sveiki, lazy!"
}
lateinit - modifikators mainīgām (mutable) īpašībām (var), kas ļauj atlikt inicializāciju līdz pirmās piekļuves brīdim. Īpašībai jābūt ne-nullable. Izmantojot īpašību pirms inicializācijas, rodas UninitializedPropertyAccessException.
// lateinit izmantošanas piemērs
lateinit var lateinitVariable: String
fun initializeVariable() {
lateinitVariable = "Sveiki, lateinit!"
}
fun useVariable() {
// Inicializācijas pārbaude pirms lietošanas (ieteicama, bet ne obligāta)
if (::lateinitVariable.isInitialized) {
println(lateinitVariable)
} else {
println("Mainīgais vēl nav inicializēts")
}
}
Galvenās atšķirības:
| Īpašība | lazy |
lateinit |
|---|---|---|
| Īpašības tips | val (lasāma) |
var (maināma) |
| Nulles vērtības iespēja | Var būt nullable vai non-nullable | Jābūt non-nullable |
| Inicializācija | Automātiska, pirmās piekļuves laikā | Rokas darbs |
| Aizkavēšana | Jā, aprēķināta pirmās piekļuves laikā | Jā, bez inicializācijas paziņojuma |
| Strāvas drošība | Parasti, sinhronizācija, ir iespējas | Nav garantēta, atkarīga no konteksta |
| Kļūda pirms piekļuves | Nē, automātiski inicializējas | UninitializedPropertyAccessException |