Sobes.tech
Junior

Kotlinдеги 'lateinit' мүчөсү кандай иштээрин түшүндүрүңүз.

sobes.tech AI

AIден жооп

lateinit колдонулат, болочокто, биринчи кирүү алдында, нөл эмес өзгөчөлүктөрдү жарыялоо үчүн.

  • Бул өзгөрмө өзгөчөлүктөргө (var) гана колдонулат.
  • Ал негизги маалымат түрлөрү менен (Int, Boolean, Float) колдонулбайт, анткени алар null болбойт.
  • Компилятор өзгөчөлүктүн жарыяланганда дароо башталуусун талап кылбайт.
  • Эгер өзгөчөлүк башталгандан мурун колдонулса, UninitializedPropertyAccessException исключени чыгат.

Мисал:

class MyClass {
    lateinit var myProperty: String // Өзгөчөлүк кийинчерээк башталат

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

    fun useProperty() {
        println(myProperty) // Инициализациядан кийин коопсуз
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Бул жерде `UninitializedPropertyAccessException` чыгат
    obj.initializeProperty("Hello")
    obj.useProperty() // "Hello" чыгарат

    // Башталганын текшерүү
    if (obj::myProperty.isInitialized) {
        println("Өзгөчөлүк башталды")
    }
}

lateinit өзгөчөлүгү башталдыбы-болбогондугун рефлексия аркылуу текшерсе болот: ::propertyName.isInitialized.

lateinit колдонуу көбүнчө фреймворктөрдө кездешет, анда өзгөчөлүктөр (dependency injection) объект түзүлгөндөн кийин инжекттелет (мисалы, Androidда UI элементтери же көзкарандычтык инъекциясы).