Sobes.tech
Junior — Middle

Qual é a diferença entre o uso de sealed class e enum em relação aos seus construtores e à possibilidade de os criar?

sobes.tech IA

Resposta da IA

Enum em Kotlin (e Java) representa um conjunto de constantes fixas. Cada enum tem um conjunto limitado de instâncias, definido na própria declaração. Os construtores do enum são sempre privados, e não é possível criar novas instâncias — apenas aquelas que são declaradas.

A classe selada (Sealed class) é uma classe abstrata com um conjunto limitado de subclasses, que são declaradas no mesmo arquivo. Ao contrário do enum, a classe selada permite criar diferentes tipos com estruturas e estados variados. Os construtores da classe selada podem ser abertos ou fechados, e é possível criar novas instâncias de subclasses, não apenas constantes fixas.

Exemplo:

// Enum com construtor privado e instâncias fixas
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Classe selada com diferentes subclasses e construtores
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

val res: Result = Result.Success("OK")

Dessa forma, o enum é limitado a um conjunto fixo de instâncias com um construtor privado, enquanto a classe selada é mais flexível, permitindo criar diferentes subclasses com seus próprios construtores e estados.