Sobes.tech
Junior

Selgitage, kuidas töötab 'lateinit' omadus Kotlinis.

sobes.tech AI

Vastus AI-lt

lateinit kasutatakse mitte-nullitavate omaduste deklaratsiooniks, mis hiljem initsialiseeritakse enne nende esimest kasutamist.

  • Rakendub ainult muudetavatele omadustele (var).
  • Ei saa kasutada primitiivsete andmetüüpidega (nagu Int, Boolean, Float), kuna need ei saa olla null.
  • Kompilaator ei nõua omaduse kohest initsialiseerimist selle deklaratsiooni ajal.
  • Kui omadust kasutatakse enne initsialiseerimist, visatakse välja erind UninitializedPropertyAccessException.

Näide:

class MyClass {
    lateinit var myProperty: String // Omadus initsialiseeritakse hiljem

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

    fun useProperty() {
        println(myProperty) // Turvaline pärast initsialiseerimist
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Siin visatakse `UninitializedPropertyAccessException`
    obj.initializeProperty("Hello")
    obj.useProperty() // Kuvab "Hello"

    // Initsialiseerimise kontroll
    if (obj::myProperty.isInitialized) {
        println("Omadus on initsialiseeritud")
    }
}

Saate kontrollida, kas lateinit omadus on initsialiseeritud, kasutades refleksiooni: ::propertyName.isInitialized.

lateinit kasutamine on levinud raamistikutes, kus omadused süstitakse (dependency injection) pärast objekti loomist (näiteks Androidis UI elementidega või sõltuvuste injekteerimisel).