Middle
A cosa servono le classi dati e le classi sealed in Kotlin?
sobes.tech AI
Risposta dell'AI
Le classi dati semplificano la creazione di classi destinate esclusivamente alla memorizzazione dei dati. Il compilatore genera automaticamente:
equals()hashCode()toString()copy()componentN()per la destrutturazione
classe dati User(val nome: String, val età: Int)
// Uso
val user = User("Alice", 30)
println(user) // Mostra User(nome=Alice, età=30)
val user2 = user.copy(età = 31)
val (nome, età) = user // Destrutturazione
Le classi sigillate rappresentano un'ereditarietà limitata di classi, dove tutte le sottoclassi possibili sono note durante la compilazione. Questo permette di usarle nelle espressioni when senza blocco else, garantendo una verifica completa di tutte le opzioni.
classe sigillata Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result() // Oggetto, poiché senza parametri
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Successo: ${result.data}")
is Result.Error -> println("Errore: ${result.message}")
Result.Loading -> println("Caricamento...")
}
}
Confronto:
| Caratteristica | Classe dati | Classe sigillata |
|---|---|---|
| Scopo | Memorizzazione dei dati | Ereditarietà limitata di classi |
| Capacità | Generazione automatica di metodi | Verifica completa in when |
| Sottoclassi | Nessuna restrizione specifica | Devono essere nello stesso file o modulo |
| Uso | Modelli di dati, DTO | Rappresentazione di stati, eventi, varianti |