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()-ով:
Ինիցիալիզացիայի կարգը:
- Հիմնական կոնստրուկտորի կոդի կատարմամբ:
initբլոկների կատարմամբ:- Երկրորդային կոնստրուկտորի կոդի կատարմամբ:
Օրինակ:
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 բլոկների օգտագործում ինիցիալիզացիայի համար, բացահայտ դելեգատացիա երկրորդային կոնստրուկտորների դեպքում՝ օբյեկտների ստեղծման համահունչությունը ապահովելու համար։