Language Intermedio

El compilador verifica que todos los subtipos sealed están cubiertos — no se necesita default.

✕ Java 8
// Must add default even though
// all cases are covered
double area(Shape s) {
    if (s instanceof Circle c)
        return Math.PI * c.r() * c.r();
    else if (s instanceof Rect r)
        return r.w() * r.h();
    else throw new IAE();
}
✓ Java 21+
// sealed Shape permits Circle, Rect
double area(Shape s) {
    return switch (s) {
        case Circle c ->
            Math.PI * c.r() * c.r();
        case Rect r ->
            r.w() * r.h();
    }; // no default needed!
}
¿Ves un problema con este código? Cuéntanos.

Seguridad en compilación

Añade un nuevo subtipo y el compilador te muestra cada lugar que necesita actualizarse.

🚫

Sin código muerto

Sin rama default inalcanzable que oculte errores.

📐

Tipos algebraicos

sealed + records + switch exhaustivo = ADTs completos en Java.

Enfoque Antiguo
default obligatorio
Enfoque Moderno
Exhaustividad con sealed
Desde JDK
21
Dificultad
Intermedio
switch exhaustivo sin default
Disponible

Ampliamente disponible desde JDK 21 LTS (sept. 2023)

Al hacer switch sobre un tipo sealed, el compilador conoce todos los subtipos posibles y verifica que cada caso esté cubierto. Si añades un nuevo subtipo, el compilador señala cada switch que queda incompleto.

Compartir 𝕏 🦋 in