Parla delle classi di dati e delle classi sigillate in Kotlin.
sobes.tech AI
Risposta dell'AI
Le classi dati in Kotlin vengono utilizzate per memorizzare i dati. Generano automaticamente metodi utili come equals(), hashCode(), toString(), copy(), nonché componenti per la destrutturazione.
// Esempio di classe dati
data class User(val name: String, val age: Int)
Le classi sealed sono utilizzate per rappresentare una gerarchia limitata di classi. Tutte le sottoclassi devono essere definite nello stesso file della classe sealed (in Kotlin 1.5+ questa restrizione è stata allentata). Questo permette al compilatore di assicurare una copertura completa delle sottoclassi, ad esempio in un'espressione when.
// Esempio di classe sealed
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Esempio di utilizzo della classe sealed in un'espressione when
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Successo: ${result.data}")
is Result.Error -> println("Errore: ${result.message}")
Result.Loading -> println("Caricamento...")
}
}
Principali differenze:
- Scopo: classi dati - memorizzazione dei dati, classi sealed - restrizione della gerarchia di classi.
- Metodi generati: le classi dati generano metodi standard per i dati, le classi sealed - no.
- Restrizione delle sottoclassi: le classi sealed impongono restrizioni sulla dichiarazione delle sottoclassi, le classi dati - no.
- Completezza in
when: il compilatore Kotlin può verificare la completezza delle sottoclassi di una classe sealed inwhensenza il ramoelse.
Sia le classi sealed che le classi dati possono essere astratte, tuttavia le classi dati non possono essere open (poiché sono final per impostazione predefinita) e non possono implementare direttamente metodi open (solo tramite interfacce o classi astratte). Le classi sealed sono, per impostazione predefinita, astratte, e i loro costruttori sono privati.