Language Średniozaawansowany

Klasy zapieczętowane dla hierarchii typów

Ogranicz, które klasy mogą rozszerzać typ — umożliwiając wyczerpujące switche.

✕ Java 8
// Anyone can extend Shape
public abstract class Shape { }
public class Circle extends Shape { }
public class Rect extends Shape { }
// unknown subclasses possible
✓ Java 17+
public sealed interface Shape
    permits Circle, Rect {}
public record Circle(double r)
    implements Shape {}
public record Rect(double w, double h)
    implements Shape {}
Widzisz problem z tym kodem? Daj nam znać.
🔐

Kontrolowana hierarchia

Tylko dozwolone podtypy mogą rozszerzać — żadnych niespodziewanych podklas.

Wyczerpujące dopasowanie

Kompilator weryfikuje, że switch obsługuje wszystkie przypadki — default nie jest potrzebny.

📐

Algebraiczne typy danych

Modeluj typy sumowe naturalnie — sealed + rekordy = ADT w Javie.

Stare podejście
Otwarta hierarchia
Nowoczesne podejście
sealed permits
Od JDK
17
Poziom trudności
Średniozaawansowany
Klasy zapieczętowane dla hierarchii typów
Dostępne

Szeroko dostępne od JDK 17 LTS (wrzesień 2021)

Klasy zapieczętowane definiują zamknięty zestaw podtypów. Kompilator zna wszystkie możliwe przypadki, umożliwiając wyczerpujące dopasowanie wzorców bez gałęzi default. W połączeniu z rekordami modelują algebraiczne typy danych.