Language Intermedio

Il compilatore verifica che tutti i sottotipi sealed siano coperti — nessun default necessario.

✕ 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!
}
Vedi un problema con questo codice? Faccelo sapere.

Sicurezza in fase di compilazione

Aggiungi un nuovo sottotipo e il compilatore mostra ogni punto da aggiornare.

🚫

Nessun codice morto

Nessun ramo default irraggiungibile che maschera i bug.

📐

Tipi algebrici

Sealed + record + switch esaustivo = ADT propri in Java.

Approccio Vecchio
Default obbligatorio
Approccio Moderno
Esaustività sealed
Dal JDK
21
Difficoltà
Intermedio
Switch esaustivo senza default
Disponibile

Ampiamente disponibile dal JDK 21 LTS (settembre 2023)

Quando si usa lo switch su un tipo sealed, il compilatore conosce tutti i possibili sottotipi e verifica che ogni caso sia gestito. Se aggiungi un nuovo sottotipo, il compilatore segnala ogni switch ora incompleto.

Condividi 𝕏 🦋 in