Sobes.tech
Junior — Middle

Em que casos é preferível usar sealed class em vez de enum em Kotlin?

sobes.tech IA

Resposta da IA

A classe selada em Kotlin é preferível a enum quando precisa descrever um conjunto limitado de tipos com estruturas de dados e comportamentos diferentes, e não apenas um conjunto de constantes.

Diferenças e quando usar uma classe selada:

  • Dados diferentes nas variantes: Em enum, todos os elementos são constantes do mesmo tipo, enquanto que a classe selada permite que cada subclasse tenha suas próprias propriedades e métodos.
  • Herança e extensibilidade: A classe selada é uma classe base com um número limitado de herdeiros, o que é útil para expressar hierarquias.
  • Uso em when: O compilador verifica a completude do when para uma classe selada, aumentando a segurança.

Exemplo de classe selada:

sealed class Resultado {
    data class Sucesso(val dados: String) : Resultado()
    data class Erro(val erro: Throwable) : Resultado()
    object Carregando : Resultado()
}

fun lidarComResultado(resultado: Resultado) {
    when(resultado) {
        is Resultado.Sucesso -> println("Dados: ${resultado.dados}")
        is Resultado.Erro -> println("Erro: ${resultado.erro.message}")
        Resultado.Carregando -> println("Carregando...")
    }
}

Se precisar apenas de uma enumeração de constantes fixas sem dados, o enum será mais simples e eficiente.