Sobes.tech
Junior — Middle

Ποια είναι η διαφορά στη χρήση της sealed class και του enum όσον αφορά τους κατασκευαστές τους και τη δυνατότητα δημιουργίας τους;

sobes.tech AI

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

Το enum σε Kotlin (και Java) αντιπροσωπεύει ένα σύνολο σταθερών. Κάθε enum έχει ένα περιορισμένο σύνολο στιγμιότυπων, ορισμένων στην ίδια δήλωση. Οι κατασκευαστές enum είναι πάντα ιδιωτικοί, και δεν μπορούν να δημιουργηθούν νέα στιγμιότυπα — μόνο αυτά που δηλώνονται.

Η sealed class (κλειστή κλάση) είναι μια αφηρημένη κλάση με ένα περιορισμένο σύνολο υποκλάσεων, που δηλώνονται στο ίδιο αρχείο. Σε αντίθεση με το enum, η sealed class επιτρέπει τη δημιουργία διαφορετικών τύπων με διαφορετικές δομές και καταστάσεις. Οι κατασκευαστές της sealed class μπορούν να είναι ανοιχτοί ή κλειστοί, και μπορεί να δημιουργηθούν νέα στιγμιότυπα υποκλάσεων, όχι μόνο σταθερές σταθερές.

Παράδειγμα:

// Enum με ιδιωτικό κατασκευαστή και σταθερά στιγμιότυπα
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Sealed class με διαφορετικές υποκλάσεις και κατασκευαστές
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

val res: Result = Result.Success("OK")

Έτσι, το enum περιορίζεται σε ένα σταθερό σύνολο στιγμιότυπων με ιδιωτικό κατασκευαστή, ενώ η sealed class είναι πιο ευέλικτη, επιτρέποντας τη δημιουργία διαφορετικών υποκλάσεων με δικούς τους κατασκευαστές και καταστάσεις.