Middle
Για ποιο λόγο χρησιμοποιούνται οι κλάσεις δεδομένων και οι κλάσεις sealed στο Kotlin;
sobes.tech AI
Απάντηση από AI
Οι κλάσεις δεδομένων απλοποιούν τη δημιουργία κλάσεων που προορίζονται μόνο για την αποθήκευση δεδομένων. Ο μεταγλωττιστής δημιουργεί αυτόματα:
equals()hashCode()toString()copy()componentN()για αποδόμηση
κλάση δεδομένων User(val όνομα: String, val ηλικία: Int)
// Χρήση
val user = User("Alice", 30)
println(user) // Εμφανίζει User(όνομα=Alice, ηλικία=30)
val user2 = user.copy(ηλικία = 31)
val (όνομα, ηλικία) = user // Αποδόμηση
Οι κλειστές κλάσεις (sealed) αντιπροσωπεύουν μια περιορισμένη ιεραρχία κλάσεων, όπου όλες οι πιθανές υποκλάσεις είναι γνωστές κατά τη διάρκεια της μεταγλώττισης. Αυτό επιτρέπει τη χρήση τους σε εκφράσεις when χωρίς μπλοκ else, διασφαλίζοντας πλήρη έλεγχο όλων των επιλογών.
κλειστή κλάση Result {
data class Success(val data: String) : Result()
data class Error(val μήνυμα: String) : Result()
object Loading : Result() // Αντικείμενο, καθώς δεν έχει παραμέτρους
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Επιτυχία: ${result.data}")
is Result.Error -> println("Σφάλμα: ${result.mήνυμα}")
Result.Loading -> println("Φόρτωση...")
}
}
Σύγκριση:
| Χαρακτηριστικό | Data-κλάση | Κλειστή κλάση |
|---|---|---|
| Σκοπός | Αποθήκευση δεδομένων | Περιορισμένη ιεραρχία κλάσεων |
| Δυνατότητες | Αυτόματη δημιουργία μεθόδων | Πλήρης έλεγχος σε when |
| Υποκλάσεις | Χωρίς συγκεκριμένο περιορισμό | Πρέπει να είναι στο ίδιο αρχείο ή module |
| Χρήση | Μοντέλα δεδομένων, DTOs | Αναπαράσταση καταστάσεων, γεγονότων, επιλογών |