Versiegelte Klassen für Typhierarchien
Einschränken, welche Klassen einen Typ erweitern dürfen – für erschöpfende Switches.
Code-Vergleich
✕ 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 {}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Kontrollierte Hierarchie
Nur erlaubte Untertypen dürfen erweitern – keine überraschenden Unterklassen.
Erschöpfendes Matching
Der Compiler prüft, dass der Switch alle Fälle abdeckt – kein default nötig.
Algebraische Datentypen
Summentypen natürlich modellieren – sealed + records = ADTs in Java.
Alter Ansatz
Offene Hierarchie
Moderner Ansatz
sealed permits
Seit JDK
17
Schwierigkeitsgrad
Fortgeschritten
JDK-Unterstützung
Versiegelte Klassen für Typhierarchien
Verfügbar
Seit JDK 17 LTS allgemein verfügbar (Sept. 2021)
Wie es funktioniert
Versiegelte Klassen definieren eine geschlossene Menge von Untertypen. Der Compiler kennt alle möglichen Fälle und ermöglicht erschöpfendes Pattern Matching ohne default-Zweig. In Kombination mit Records modellieren sie algebraische Datentypen.
Zugehörige Dokumentation