Classes sealed para hierarquias de tipos
Restrinja quais classes podem estender um tipo — possibilitando switches exaustivos.
Comparação de Código
✕ 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 {}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Hierarquia controlada
Apenas subtipos permitidos podem estender — sem subclasses surpresa.
Correspondência exaustiva
O compilador verifica que o switch cobre todos os casos, sem default necessário.
Tipos de dados algébricos
Modele tipos soma naturalmente — sealed + records = ADTs em Java.
Abordagem Antiga
Hierarquia aberta
Abordagem Moderna
sealed permits
Desde o JDK
17
Dificuldade
Intermediário
Suporte JDK
Classes sealed para hierarquias de tipos
Disponível
Amplamente disponível desde o JDK 17 LTS (set 2021)
Como funciona
Classes sealed definem um conjunto fechado de subtipos. O compilador conhece todos os casos possíveis, permitindo pattern matching exaustivo sem um branch default. Combinadas com records, elas modelam tipos de dados algébricos.
Documentação Relacionada