🏷 Sealed Classes
2 patterns
Topic: Sealed Classes
All Java patterns related to Sealed Classes — java.evolved
Language
Exhaustive switch without default
Old
// 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();
}
Modern
// 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!
}
hover to see modern →
JDK 21+
learn more →
Language
Sealed classes for type hierarchies
Old
// Anyone can extend Shape
public abstract class Shape { }
public class Circle extends Shape { }
public class Rect extends Shape { }
// unknown subclasses possible
Modern
public sealed interface Shape
permits Circle, Rect {}
public record Circle(double r)
implements Shape {}
public record Rect(double w, double h)
implements Shape {}
hover to see modern →
JDK 17+
learn more →