Klasy zapieczętowane dla hierarchii typów
Ogranicz, które klasy mogą rozszerzać typ — umożliwiając wyczerpujące switche.
Porównanie kodu
✕ 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ć.
Dlaczego nowoczesne podejście wygrywa
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
Wsparcie JDK
Klasy zapieczętowane dla hierarchii typów
Dostępne
Szeroko dostępne od JDK 17 LTS (wrzesień 2021)
Jak to działa
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.
Powiązana dokumentacja
Dowód