Language Fortgeschritten

Einschränken, welche Klassen einen Typ erweitern dürfen – für erschöpfende Switches.

✕ 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.
🔐

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
Versiegelte Klassen für Typhierarchien
Verfügbar

Seit JDK 17 LTS allgemein verfügbar (Sept. 2021)

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.

Teilen 𝕏 🦋 in