Sobes.tech
Junior — Middle

¿En qué se diferencia el uso de sealed class de enum en relación con sus constructores y la posibilidad de crearlos?

sobes.tech AI

Respuesta de la IA

Enum en Kotlin (y Java) representa un conjunto de constantes fijas. Cada enum tiene un conjunto limitado de instancias, definidas en la misma declaración. Los constructores de enum siempre son privados, y no se pueden crear nuevas instancias, solo las que se declaran.

La clase sellada (Sealed class) es una clase abstracta con un conjunto limitado de subclases, que se declaran en el mismo archivo. A diferencia del enum, la clase sellada permite crear diferentes tipos con distintas estructuras y estados. Los constructores de la clase sellada pueden ser abiertos o cerrados, y se pueden crear nuevas instancias de las subclases, no solo constantes fijas.

Ejemplo:

// Enum con constructor privado y instancias fijas
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Clase sellada con diferentes subclases y constructores
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

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

De esta manera, el enum está limitado a un conjunto fijo de instancias con un constructor privado, mientras que la clase sellada es más flexible, permitiendo crear diferentes subclases con sus propios constructores y estados.