Sobes.tech
Middle

¿Estás familiarizado con las clases selladas y en qué consisten?

sobes.tech AI

Respuesta de la IA

Sí, conozco.

La característica de las clases sealed es que permiten limitar la jerarquía de herencia. Todos los subtipos directos de una clase sealed deben ser declarados en el mismo archivo. Esto garantiza que el compilador conozca todos los posibles subtipos, lo cual es útil para verificar la exhaustividad en las expresiones when.

Ejemplo:

sealed class Result {
    data class Success(val message: String) : Result()
    data class Error(val code: Int, val description: String) : Result()
    object Loading : Result() // Singleton para el estado de carga
}

fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Éxito: ${result.message}")
        is Result.Error -> println("Error ${result.code}: ${result.description}")
        Result.Loading -> println("Cargando...")
        // No es necesario un else, ya que el compilador conoce todas las opciones
    }
}

Ventajas:

  • Seguridad: Garantiza la exhaustividad de las expresiones when sin necesidad de else.
  • Legibilidad: Claramente indica un conjunto limitado de estados o subtipos posibles.
  • Control: Previene la herencia no controlada desde fuera.

Diferencia con enum class: Las clases sealed pueden tener diferentes tipos de datos para cada subtipo (como Success y Error en el ejemplo), mientras que los elementos de enum class son estáticos y solo pueden tener propiedades definidas, comunes para todos. Las clases sealed también pueden tener instancias-objetos (Loading).