Պատմեք Kotlin լեզվով դասերի ինիցիալիզատորների մասին։
sobes.tech AI
Պատասխան AI-ից
Կոտլինում դասերը կարող են ունենալ հիմնական և մեկ կամ մի քանի երկրորդական կոնստրուկտորներ: Ինիցիալիզատորները՝ դա init բլոկներն են, որոնք կատարվում են նրանց հայտարարության կարգով՝ հիմնական կոնստրուկտորից հետո (եթե կա) կամ երկրորդական կոնստրուկտորից հետո, եթե հիմնականը չկա:
Հիմնական կոնստրուկտոր
Նշվում է անմիջապես դասի վերնագրում: Կարող է պարունակել պարամետրեր, որոնք օգտագործվում են հատկությունների ինիցիալիզացման համար:
class User(name: String, age: Int) {
init {
// Այս բլոկը կատարվում է դասի օրինակ ստեղծելիս
println("User created: $name, $age")
}
}
Երկրորդական կոնստրուկտորներ
Նշվում են constructor բանալիով և միշտ պետք է դելեգատոր լինեն նույն դասի այլ կոնստրուկտորին, կամ հիմնականին (առանց this) կամ մյուս երկրորդականին:
class User {
init {
// Այս բլոկը կատարվում է առաջինը, եթե կա հիմնական կոնստրուկտոր
}
constructor(name: String) : this() {
// Երկրորդական կոնստրուկտոր 1
println("User created with name: $name")
}
constructor(name: String, age: Int) : this(name) {
// Երկրորդական կոնստրուկտոր 2, կանչում է առաջին երկրորդականը
println("User created with name and age: $name, $age")
}
}
Կատարման կարգ
- Կոդը հիմնական կոնստրուկտորում (եթե պարամետրեր կան, օգտագործվում են)
initբլոկները հերթով- Կոդը այն երկրորդական կոնստրուկտորում, որը կանչվել է (հետո դելեգատորային կանչից)
Օրինակ կատարման կարգ:
class Example {
init {
println("Init block 1")
}
constructor(i: Int) {
println("Secondary constructor $i")
}
init {
println("Init block 2")
}
}
fun main() {
Example(10)
}
Արդյունք:
Init block 1
Init block 2
Secondary constructor 10
Անգամ եթե կանչվում է երկրորդական կոնստրուկտոր, init բլոկները միշտ կատարվում են նրա մարմնի առաջ: Սա ապահովում է, որ հիմնական ինիցիալիզացիան ավարտված է մինչև հատուկ կոդի կատարմանը երկրորդական կոնստրուկտորում:
Ինիցիալիզատորները անփոխարինելի են այն գործառույթների համար, որոնք պետք է կատարվեն ցանկացած օրինակ ստեղծելիս՝ անկախ այն բանից, թե որ կոնստրուկտորն է օգտագործվում: Օրինակ՝ մուտքային տվյալների ստուգում կամ օբյեկտի վիճակի կարգավորումը։