Sobes.tech
Junior — Middle

Σε ποιες περιπτώσεις είναι προτιμότερο να χρησιμοποιείτε sealed class αντί για enum σε Kotlin;

sobes.tech AI

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

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

Διαφορές και πότε να χρησιμοποιείτε μια sealed class:

  • Διαφορετικά δεδομένα στις παραλλαγές: Στο enum, όλα τα στοιχεία είναι σταθερές του ίδιου τύπου, ενώ η sealed class επιτρέπει σε κάθε υποκλάση να έχει τις δικές της ιδιότητες και μεθόδους.
  • Κληρονομικότητα και επεκτασιμότητα: Η sealed class είναι μια βασική κλάση με περιορισμένο αριθμό κληρονόμων, χρήσιμη για την έκφραση ιεραρχιών.
  • Χρήση στο when: Ο μεταγλωττιστής ελέγχει την πληρότητα του when για μια sealed class, αυξάνοντας την ασφάλεια.

Παράδειγμα sealed class:

sealed class Αποτέλεσμα {
    data class Επιτυχία(val δεδομένα: String) : Αποτέλεσμα()
    data class Σφάλμα(val σφάλμα: Throwable) : Αποτέλεσμα()
    object Φόρτωση : Αποτέλεσμα()
}

fun χειρισμόςΑποτελέσματος(αποτέλεσμα: Αποτέλεσμα) {
    when(αποτέλεσμα) {
        is Αποτέλεσμα.Επιτυχία -> println("Δεδομένα: ${αποτέλεσμα.δεδομένα}")
        is Αποτέλεσμα.Σφάλμα -> println("Σφάλμα: ${αποτέλεσμα.σφάλμα.message}")
        Αποτέλεσμα.Φόρτωση -> println("Φόρτωση...")
    }
}

Αν χρειάζεστε μόνο μια λίστα σταθερών σταθερών χωρίς δεδομένα, το enum είναι πιο απλό και αποδοτικό.