Sobes.tech
Junior

Kotlin-də 'lateinit' xüsusiyyətinin necə işlədiyini izah edin.

sobes.tech Süni İntellekt

AI-dan cavab

lateinit istifadə edilən mülkiyyətləri elan etmək üçün istifadə olunur, onlar daha sonra, ilk müraciətdən əvvəl, inisializasiya ediləcək.

  • Yalnız dəyişkən mülkiyyətlərə (var) tətbiq edilir.
  • Primitiv məlumat tipləri ilə (Int, Boolean, Float) istifadə edilə bilməz, çünki onlar null ola bilməz.
  • Kompilyator mülkiyyətin elanında dərhal inisializasiya edilməsini tələb etmir.
  • Əgər mülkiyyət inisializasiya edilmədən istifadə olunarsa, UninitializedPropertyAccessException istisnası atılır.

Nümunə:

class MyClass {
    lateinit var myProperty: String // Mülkiyyət daha sonra inisializasiya ediləcək

    fun initializeProperty(value: String) {
        myProperty = value
    }

    fun useProperty() {
        println(myProperty) // Inisializasiya sonrası təhlükəsiz
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Burada UninitializedPropertyAccessException atacaq
    obj.initializeProperty("Hello")
    obj.useProperty() // "Hello" çap edəcək

    // Inisializasiya yoxlaması
    if (obj::myProperty.isInitialized) {
        println("Mülkiyyət inisializasiya olunub")
    }
}

lateinit ilə elan edilmiş mülkiyyətin inisializasiya olunub-olunmadığını refleksiya vasitəsilə yoxlamaq mümkündür: ::propertyName.isInitialized.

lateinit istifadəsi, xüsusən, obyekt yaradıldıqdan sonra (məsələn, Android-də UI elementləri və ya bağımlılıq injeksiyası ilə) mülkiyyətlərin injektsiya olunduğu frameworklərdə geniş yayılmışdır.