Middle
¿Qué son las clases selladas y cuál es su propósito?
sobes.tech AI
Respuesta de la IA
Las clases selladas representan jerarquías de clases limitadas. Se utilizan para representar un conjunto restringido de posibles estados o valores.
Características principales y propósito:
- Jerarquía limitada: Los descendientes de una clase sellada deben ser declarados en el mismo archivo o anidados dentro de la clase sellada antes de Kotlin 1.5. Desde la versión 1.5, esta restricción se relaja: los descendientes pueden estar en cualquier archivo del mismo paquete.
- Clases enum con estado: A diferencia de las clases enum, cada descendiente de una clase sellada puede tener su propio estado y comportamiento.
whenexhaustivo: El compilador garantiza que el bloquewhenpara una instancia de una clase sellada sea exhaustivo (todos los casos están cubiertos), si no se especifica una ramaelse. Esto reduce la probabilidad de errores en tiempo de ejecución.
Ejemplo:
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>() // Instancia única
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Procesamiento del resultado exitoso
println("Data: ${result.data}")
}
is Result.Error -> {
// Procesamiento del error
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Procesamiento del estado de carga
println("Loading data...")
}
// No se requiere rama else, ya que todas las subclases
// Result están cubiertas por el compilador
}
}
Propósito:
- Representación segura de estados: Representar de manera confiable un número finito de estados posibles, por ejemplo, el resultado de una solicitud de red (
Success,Error,Loading). - Mejora de la legibilidad del código: Hacer que el código sea más explícito al manejar diferentes casos.
- Aumento de la fiabilidad de las expresiones
when: El compilador ayuda a evitar casos no manejados. - Reemplazo de clases enum con estado: Cuando es necesario vincular datos con "variantes" específicas de un enumerado.
De esta manera, las clases selladas proporcionan una forma flexible de modelar conjuntos finitos de valores con la capacidad de almacenar datos específicos para cada valor, garantizando seguridad y claridad al manejar estos valores en expresiones when.