Sobes.tech
Middle

Fale sobre classes de dados e classes seladas em Kotlin.

sobes.tech IA

Resposta da IA

As classes de dados em Kotlin são usadas para armazenar dados. Elas geram automaticamente métodos úteis como equals(), hashCode(), toString(), copy(), bem como componentes para destruição.

// Exemplo de classe de dados
data class User(val name: String, val age: Int)

As classes seladas são usadas para representar uma hierarquia limitada de classes. Todas as subclasses devem ser definidas no mesmo arquivo que a classe selada (em Kotlin 1.5+ essa restrição foi flexibilizada). Isso permite que o compilador garanta uma verificação exaustiva das subclasses, por exemplo, em uma expressão when.

// Exemplo de classe selada
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Exemplo de uso da classe selada em uma expressão when
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Sucesso: ${result.data}")
        is Result.Error -> println("Erro: ${result.message}")
        Result.Loading -> println("Carregando...")
    }
}

Principais diferenças:

  • Propósito: classes de dados - armazenamento de dados, classes seladas - restrição da hierarquia de classes.
  • Métodos gerados: classes de dados geram métodos padrão para os dados, classes seladas - não.
  • Restrição de subclasses: classes seladas impõem restrições na declaração de subclasses, classes de dados - não.
  • Verificação exaustiva no when: o compilador Kotlin pode verificar a exaustividade das subclasses de uma classe selada em when sem a necessidade de uma cláusula else.

Tanto classes seladas quanto classes de dados podem ser abstratas, mas classes de dados não podem ser open (pois são final por padrão) e não podem implementar métodos open diretamente (apenas através de interfaces ou classes abstratas). Classes seladas são, por padrão, abstratas, e seus construtores são privados.