Sobes.tech
Middle

Ինչպիսի՞ն են Kotlin-ում կոնստրուկտորների և օբյեկտների ինիցիալիզացիայի հետ աշխատելու առանձնահատկությունները։

sobes.tech AI

Պատասխան AI-ից

Կոտլինում դասերը կարող են ունենալ հիմնական կոնստրուկտոր և մեկ կամ մի քանի երկրորդային կոնստրուկտորներ:

Հիմնական կոնստրուկտոր:

  • Հայտարարվում է դասի գլխում:
    class User(val անուն: String, var տարի: Int = 0) {
        // դասի մարմինը
    }
    
  • Չի ունենա մարմին: Ինիցիալիզացիոն կոդը կատարվում է init բլոկներում:
  • Դասի մեջ հայտարարված val կամ var-ով նշված հատկությունները դառնում են դասի հատկություններ:
  • Կոնստրուկտորի պարամետրերը կարող են օգտագործվել init բլոկներում և հատկությունների ինիցիալիզացիայում:
    init {
        println("Օգտագործողի ինիցիալիզացիա $անուն")
    }
    
    val նկարագրություն = "Օգտագործող: $անուն, տարի: $տարի"
    
  • Եթե հիմնական կոնստրուկտորը չունի նշումներ կամ տեսանելիության մոդիֆիկատորներ, constructor բառը կարելի է բաց թողնել:

init բլոկներ:

  • Ունեն ինիցիալիզացիոն կոդ, որը կատարվում է օբյեկտի ստեղծման ժամանակ:
  • Կատարվում են ըստ դրանց հայտարարության կարգի:
  • Կատարվում են հիմնական կոնստրուկտորի կանչից հետո, բայց երկրորդային կոնստրուկտորներից առաջ:

Երկրորդային կոնստրուկտորներ:

  • Հայտարարվում են constructor բառով:
  • Կարող են դելեգատել մյուս կոնստրուկտորին this()-ով կամ բազային դասի կոնստրուկտորին super()-ով:
  • Դելեգացիան պետք է լինի առաջին հրահանգը:
    class User(val անուն: String) {
        constructor(անուն: String, տարի: Int) : this(անուն) {
            println("Երկրորդային կոնստրուկտոր")
            // լրացուցիչ ինիցիալիզացիա
        }
    }
    
  • Եթե դասը ունի հիմնական կոնստրուկտոր, ապա բոլոր երկրորդայինները պետք է բացահայտ կամ անբացահայտ դելեգատեն նրան this()-ով:

Ինիցիալիզացիայի կարգը:

  1. Հիմնական կոնստրուկտորի կոդի կատարմամբ:
  2. init բլոկների կատարմամբ:
  3. Երկրորդային կոնստրուկտորի կոդի կատարմամբ:

Օրինակ:

class Example(անուն: String) {
    init {
        println("Առաջին init բլոկ $անուն")
    }

    val հատկություն1 = "Հատկություն 1"

    init {
        println("Երկրորդ init բլոկ $անուն")
    }

    constructor(անուն: String, տարի: Int) : this(անուն) {
        println("Երկրորդային կոնստրուկտոր $անուն, տարի $տարի")
    }
}

fun main() {
    val ex1 = Example("Օգտագործող1") // Տպում է: Առաջին init բլոկ Օգտագործող1, Երկրորդ init բլոկ Օգտագործող1
    val ex2 = Example("Օգտագործող2", 30) // Տպում է: Առաջին init բլոկ Օգտագործող2, Երկրորդ init բլոկ Օգտագործող2, Երկրորդային կոնստրուկտոր Օգտագործող2, տարի 30
}

Հիմնական հատկանիշներ՝ դեկլարատիվ սինտաքսիս հիմնական կոնստրուկտորի, init բլոկների օգտագործում ինիցիալիզացիայի համար, բացահայտ դելեգատացիա երկրորդային կոնստրուկտորների դեպքում՝ օբյեկտների ստեղծման համահունչությունը ապահովելու համար։