record Person(String name, int age) {}
if (obj instanceof Person person) {
System.out.println("Name: " + person.name());
}
Agora vamos considerar um exemplo mais tradicional. As formas geométricas são uma maneira clássica de demonstrar como as interfaces seladas funcionam com registros e tornam a correspondência de padrões especialmente clara. A elegância dessa combinação é evidente nas expressões de switch (introduzido em Java 17), que permitem escrever um código conciso e de times que se assemelha aos tipos de dados algébricos em linguagens funcionais:
sealed interface Shape permits Rectangle, Circle, Triangle {}
record Rectangle(double width, double height) implements Shape {}
record Circle(double radius) implements Shape {}
record Triangle(double base, double height) implements Shape {}
public class RecordPatternMatchingExample {
public static void main(String() args) {
Shape shape = new Circle(5);
// Expressive, type-safe pattern matching
double area = switch (shape) {
case Rectangle r -> r.width() * r.height();
case Circle c -> Math.PI * c.radius() * c.radius();
case Triangle t -> t.base() * t.height() / 2;
};
System.out.println("Area = " + area);
}
}
Aqui, o Shape Tipo é uma interface selada, permitindo apenas RectangleAssim, Circlee Triangle. Como esse conjunto está fechado, o interruptor é exaustivo e não requer ramificação padrão.
Usando registros como objetos de transferência de dados
Registros Excel como objetos de transferência de dados (DTOs) em designs modernos de API, como REST, GraphQL, GRPC ou comunicação entre serviços. Sua sintaxe concisa e a igualdade de construções tornam os registros ideais para o mapeamento entre as camadas de serviço. Aqui está um exemplo:
