Neste artigo damos continuidade à nossa análise histórica sobre os recursos que cada versão do Java trouxe para tornar o código mais limpo e simples para o desenvolvedor.
Se você caiu de paraquedas aqui e ainda não leu a primeira parte, clique aqui.
Java 19 e 20
As versões Java 19 e 20 não trouxeram mudanças definitivas na forma de escrever código, mas apresentaram importantes recursos em preview que abririam o caminho para grandes transformações nas versões seguintes.
Java 21
O Java 21, lançado em setembro de 2023, esta versão trouxe finalmente recursos estáveis que mudaram a forma de escrever código no dia a dia.
Entre eles estão:
- Record Patterns
- Pattern Matching for switch
(As Virtual Threads também foram finalizadas — sem dúvida, a melhor parte desta versão. Elas merecem um artigo dedicado apenas a elas!)
🧩 Record Patterns
Os Record Patterns permitem desconstruir objetos record diretamente em variáveis.
record Point(int x, int y) {}
// Before 21
// pattern matching for instanceof
void printPoint(Object obj) {
if (obj instanceof Point p) {
System.out.println("x = " + p.x() + ", y = " + p.y());
}
}
// With 21
// record pattern
void printPoint(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.println("x = " + x + ", y = " + y);
}
}
🧠 Pattern Matching for switch
O Pattern Matching for switch foi finalizado no Java 21.
Agora o switch pode verificar tipos e extrair valores diretamente, eliminando a necessidade de múltiplos if/else com instanceof.
// Before
static String process(Object obj) {
if (obj instanceof String s) {
return "String com %d caracteres".formatted(s.length());
} else if (obj instanceof Integer i) {
return "Número: " + i;
} else {
return "Outro tipo";
}
}
// With 21
static String process(Object obj) {
return switch (obj) {
case String s -> "String com %d caracteres".formatted(s.length());
case Integer i -> "Número: " + i;
case null -> "Valor nulo";
default -> "Outro tipo";
};
}
Java 22
O Java 22 não trouxe novas features finais que alterassem a forma de escrever código.
Top comments (0)