Sobes.tech
Junior

Vorbește despre initializatori în clase în limbajul Kotlin.

sobes.tech AI

Răspuns de la AI

În Kotlin, clasele pot avea un constructor primar și unul sau mai mulți constructori secundari. Inițializatorii sunt blocuri de cod init care sunt executate în ordine după declarație, fie după constructorul primar (dacă există), fie după constructorul secundar, dacă nu există unul primar.

Constructor primar

Este declarat direct în antetul clasei. Poate conține parametri folosiți pentru inițializarea proprietăților.

class User(name: String, age: Int) {
    init {
        // Acest bloc se execută la crearea unei instanțe a clasei
        println("Utilizator creat: $name, $age")
    }
}

Constructori secundari

Sunt declarați cu cuvântul cheie constructor și trebuie să delegheze întotdeauna apelul către alt constructor al aceleiași clase, fie la primar (prin this), fie la alt secundar.

class User {
    init {
        // Acest bloc se execută primul, dacă există un constructor primar
    }

    constructor(name: String) : this() {
        // Constructor secundar 1
        println("Utilizator creat cu numele: $name")
    }

    constructor(name: String, age: Int) : this(name) {
        // Constructor secundar 2, apelează primul secundar
        println("Utilizator creat cu numele și vârsta: $name, $age")
    }
}

Ordinea execuției

  1. Codul din constructorul primar (dacă are parametri, aceștia sunt folosiți).
  2. Blocurile init în ordine.
  3. Codul din constructorul secundar apelat (după delegare).

Exemplu de ordine de execuție:

class Example {
    init {
        println("Bloc init 1")
    }

    constructor(i: Int) {
        println("Constructor secundar $i")
    }

    init {
        println("Bloc init 2")
    }
}

fun main() {
    Example(10)
}

Ieșire:

Bloc init 1
Bloc init 2
Constructor secundar 10

Chiar dacă se apelează un constructor secundar, blocurile init sunt întotdeauna executate înainte de corpul său. Acest lucru asigură că inițializarea principală a obiectului este finalizată înainte de executarea codului specific constructorului secundar.

Inițializatorii sunt indispensabili pentru executarea logicii care trebuie realizată la crearea oricărei instanțe a clasei, indiferent de constructorul utilizat. De exemplu, pentru verificarea datelor de intrare sau configurarea stării obiectului.