გთხოვთ, ისაუბრეთ 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 ბლოკები ყოველთვის შესრულდება მის სხეულზე ადრე. ეს უზრუნველყოფს, რომ ძირითადი ინიციალიზაცია დასრულებულია, სანამ სპეციფიკური კოდი მეორად კონსტრუქტორში შესრულდება.
ინიციალიზატორები შეუცვლელები არიან ნებისმიერი კლასის ინстанციის შექმნის დროს შესრულებული ლოგიკისთვის, независимо იმ კონსტრუქტორის მიხედვით, რომელიც გამოიყენება. მაგალითად, შემოწმება შემავალი მონაცემების ან ობიექტის მდგომარეობის დასაყენებლად.