Sobes.tech
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