Sobes.tech
Middle

Μίλησέ μου για τις κλάσεις δεδομένων και τις κλάσεις σφραγισμένες σε Kotlin.

sobes.tech AI

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

Οι κλάσεις δεδομένων στο Kotlin χρησιμοποιούνται για την αποθήκευση δεδομένων. Αυτόματα δημιουργούν χρήσιμες μεθόδους όπως equals(), hashCode(), toString(), copy(), καθώς και συστατικά για αποδόμηση.

// Παράδειγμα κλάσης δεδομένων
data class User(val name: String, val age: Int)

Οι κλειστές κλάσεις χρησιμοποιούνται για την αναπαράσταση περιορισμένης ιεραρχίας κλάσεων. Όλες οι υποκλάσεις πρέπει να οριστούν στο ίδιο αρχείο με την κλειστή κλάση (στο Kotlin 1.5+ αυτός ο περιορισμός έχει χαλαρώσει). Αυτό επιτρέπει στον μεταγλωττιστή να διασφαλίσει μια πλήρη κάλυψη των υποκλάσεων, για παράδειγμα, σε μια έκφραση when.

// Παράδειγμα κλειστής κλάσης
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Παράδειγμα χρήσης της κλειστής κλάσης σε έκφραση `when`
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Επιτυχία: ${result.data}")
        is Result.Error -> println("Σφάλμα: ${result.message}")
        Result.Loading -> println("Φόρτωση...")
    }
}

Βασικές διαφορές:

  • Σκοπός: κλάσεις δεδομένων - αποθήκευση δεδομένων, κλειστές κλάσεις - περιορισμός ιεραρχίας κλάσεων.
  • Δημιουργούμενες μέθοδοι: κλάσεις δεδομένων δημιουργούν τυπικές μεθόδους για δεδομένα, κλειστές κλάσεις - όχι.
  • Περιορισμός υποκλάσεων: οι κλειστές κλάσεις επιβάλλουν περιορισμούς στην δήλωση υποκλάσεων, οι κλάσεις δεδομένων - όχι.
  • Πλήρης κάλυψη σε when: ο μεταγλωττιστής Kotlin μπορεί να ελέγξει την πλήρη κάλυψη των υποκλάσεων μιας κλειστής κλάσης σε when χωρίς else.

Τόσο οι κλειστές όσο και οι κλάσεις δεδομένων μπορούν να είναι αφηρημένες, αλλά οι κλάσεις δεδομένων δεν μπορούν να είναι open (καθώς είναι final από προεπιλογή) και δεν μπορούν να υλοποιούν άμεσα open μεθόδους (μόνο μέσω διεπαφών ή αφηρημένων κλάσεων). Οι κλειστές κλάσεις είναι, από προεπιλογή, αφηρημένες, και οι κατασκευαστές τους είναι ιδιωτικοί.