Language Intermediário

O compilador verifica que todos os subtipos sealed estão cobertos — sem necessidade de 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!
}
Viu um problema com este código? Nos avise.

Segurança em tempo de compilação

Adicione um novo subtipo e o compilador mostra cada lugar a ser atualizado.

🚫

Sem código morto

Sem branch default inalcançável que mascara bugs.

📐

Tipos algébricos

sealed + records + switch exaustivo = ADTs completos em Java.

Abordagem Antiga
Default obrigatório
Abordagem Moderna
Exaustividade com sealed
Desde o JDK
21
Dificuldade
Intermediário
Switch exaustivo sem default
Disponível

Amplamente disponível desde o JDK 21 LTS (set 2023)

Ao fazer switch sobre um tipo sealed, o compilador conhece todos os subtipos possíveis e verifica que cada caso está tratado. Se você adicionar um novo subtipo, o compilador aponta cada switch que ficou incompleto.

Compartilhar 𝕏 🦋 in