Sobes.tech
Junior

Μίλησε για τους αρχικοποιητές στις κλάσεις στη γλώσσα Kotlin.

sobes.tech AI

Απάντηση από AI

Στην Kotlin, οι κλάσεις μπορούν να έχουν έναν πρωταρχικό και έναν ή περισσότερους δευτερεύοντες κατασκευαστές. Οι αρχικοποιητές είναι μπλοκ κώδικα init που εκτελούνται με τη σειρά μετά την δήλωσή τους, είτε μετά τον πρωταρχικό κατασκευαστή (αν υπάρχει) είτε μετά τον δευτερεύοντα, αν δεν υπάρχει πρωταρχικός.

Πρωταρχικός κατασκευαστής

Δηλώνεται άμεσα στην επικεφαλίδα της κλάσης. Μπορεί να περιέχει παραμέτρους που χρησιμοποιούνται για την αρχικοποίηση των ιδιοτήτων.

class User(name: String, age: Int) {
    init {
        // Αυτό το μπλοκ εκτελείται κατά τη δημιουργία ενός στιγμιότυπου της κλάσης
        println("Δημιουργήθηκε χρήστης: $name, $age")
    }
}

Δευτερεύοντες κατασκευαστές

Δηλώνονται με τη λέξη-κλειδί constructor και πρέπει πάντα να αναθέτουν την κλήση σε έναν άλλο κατασκευαστή της ίδιας κλάσης, είτε στον πρωταρχικό (μέσω this) είτε σε άλλον δευτερεύοντα.

class User {
    init {
        // Αυτό το μπλοκ εκτελείται πρώτο, αν υπάρχει πρωταρχικός κατασκευαστής
    }

    constructor(name: String) : this() {
        // Δευτερεύων κατασκευαστής 1
        println("Δημιουργήθηκε χρήστης με όνομα: $name")
    }

    constructor(name: String, age: Int) : this(name) {
        // Δευτερεύων κατασκευαστής 2, καλεί τον πρώτο δευτερεύοντα
        println("Δημιουργήθηκε χρήστης με όνομα και ηλικία: $name, $age")
    }
}

Σειρά εκτέλεσης

  1. Ο κώδικας στον πρωταρχικό κατασκευαστή (αν υπάρχουν παράμετροι, χρησιμοποιούνται).
  2. Τα μπλοκ init με τη σειρά.
  3. Ο κώδικας στον καλούμενο δευτερεύοντα κατασκευαστή (μετά την αναθέση).

Παράδειγμα σειράς εκτέλεσης:

class Example {
    init {
        println("Μπλοκ init 1")
    }

    constructor(i: Int) {
        println("Δευτερεύων κατασκευαστής $i")
    }

    init {
        println("Μπλοκ init 2")
    }
}

fun main() {
    Example(10)
}

Έξοδος:

Μπλοκ init 1
Μπλοκ init 2
Δευτερεύων κατασκευαστής 10

Ακόμα και αν καλείται δευτερεύων κατασκευαστής, τα μπλοκ init εκτελούνται πάντα πριν από το σώμα του. Αυτό διασφαλίζει ότι η βασική αρχικοποίηση του αντικειμένου έχει ολοκληρωθεί πριν την εκτέλεση του ειδικού κώδικα του δευτερεύοντα κατασκευαστή.

Οι αρχικοποιητές είναι απαραίτητοι για την εκτέλεση λογικής που πρέπει να πραγματοποιηθεί κατά τη δημιουργία οποιουδήποτε στιγμιότυπου της κλάσης, ανεξάρτητα από τον χρησιμοποιούμενο κατασκευαστή. Για παράδειγμα, για τον έλεγχο εισόδου δεδομένων ή την ρύθμιση της κατάστασης του αντικειμένου.