Дар бораи инициализаторҳо дар синфҳо дар Kotlin гап зан.
sobes.tech AI
Ҷавоб аз AI
В Kotlin класи можуть мати первинний і один або кілька вторинних конструкторів. Ініціалізатори — це блоки коду 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 виконуються завжди перед його тілом. Це гарантує, що основна ініціалізація об'єкта завершена до виконання специфічного коду вторинного конструктора.
Ініціалізатори незамінні для виконання логіки, яка має бути виконана при створенні будь-якого екземпляра класу, незалежно від того, який конструктор використовується. Наприклад, для перевірки вхідних даних або налаштування стану об'єкта.