DEV Community

Cover image for [PT-BR] Minhas duas features preferidas do Java 17
João Victor Martins
João Victor Martins

Posted on

[PT-BR] Minhas duas features preferidas do Java 17

No dia 14/09/2021, foi lançada a versão 17 do Java, sendo ela uma versão LTS (Long Term Support). Assim como nas últimas versões, a 17 trouxe algumas features bem divertidas. Minha ideia nesse post é mostrar as duas que mais me chamaram atenção, que são a 409:Sealed Classes e a 406:Pattern Matching for Switch.

Sealed Classes

Sealed classes e interfaces restringem quais outras classes ou interfaces devem estendê-las e/ou implementa-las. O objetivo é permitir que o autor da classe ou interface tenha mais controle sobre a mesma, além de prover um jeito mais declarativo de restringir o uso da super classe. Um outro objetivo é o suporte a pattern matchings.

public abstract sealed class Automovel 
    permits com.exemplo.automovel.Carro,
            com.examplo.automovel.Moto { ... }
Enter fullscreen mode Exit fullscreen mode

Uma vez que eu defino quais classes irão poder estender de Automovel, qualquer outra classe diferente de Carro e Moto não deve ser permitida. É importante ressaltar, que as classes que irão estender uma sealed class, deverão estar no mesmo módulo, caso esteja usando JPMS (Java Platform Module System) ou no mesmo pacote, caso não esteja usando JPMS. Para a classes que estendem, existem algumas regras. São elas:

  1. Uma subclasse deve ser declarada como final para manter a hierarquia.

  2. Uma subclasse deve ser declarada como sealed e permitir a extensão de um novo conjunto de classes.

  3. Uma subclasse deve ser declarada como non-sealed e assim permitir que qualquer classe a estenda.

Pattern Matching for Switch

Estender a correspondência de padrões para switch permite que uma expressão seja testada em relação a vários padrões, cada um com uma ação específica, de forma que consultas complexas orientadas a dados possam ser expressas de forma concisa e segura. O objetivo é melhorar a expressividade e a aplicabilidade das extensões e instruções switch, além de certificar que todas as expressões e instruções existentes continuem a compilar sem alterações.

static void printarTipoAutomovel(Automovel automovel) {
   switch(automovel) {
     case Carro -> System.out.println("É um carro");
     case Moto -> System.out.println("É uma moto");
     default -> System.out.println("Automóvel não identificado");
   }
}
Enter fullscreen mode Exit fullscreen mode

É importante ressaltar que a JEP 406: Pattern Matching for switch está como preview, o que significa que ela pode ser retirada e não fazer parte das próximas versões do Java.

Concluindo

O objetivo do post era trazer as features que mais me interessaram no Java 17, sendo essa uma escolha totalmente pessoal. Existem muitas outras features legais, que podem ser vistas em: https://openjdk.java.net/projects/jdk/17/. Espero que gostem da leitura. Dúvidas, sugestões e/ou críticas, estou à disposição.

Referências
https://openjdk.java.net/jeps/409
https://openjdk.java.net/jeps/406

Discussion (10)

Collapse
cpdaniiel profile image
Daniel Cavalcanti

Ótimo conteúdo, como sempre..

Collapse
j_a_o_v_c_t_r profile image
João Victor Martins Author

Valeu, Daniel. Abraço!!

Collapse
dearrudam profile image
Maximillian Arruda

É bem legal mesmo essas features!!!! Que massa!!!

Collapse
j_a_o_v_c_t_r profile image
João Victor Martins Author

Gostei muito, Max ... E pensar que tem tantas outras hahaha!!

Collapse
andremoriya profile image
André Moriya

Show de bola João.
Parabéns pelo post

Collapse
j_a_o_v_c_t_r profile image
João Victor Martins Author

Valeu, André. Grande abraço!!

Collapse
paulo_iggor profile image
Paulo Igor

Congratulations.

Collapse
j_a_o_v_c_t_r profile image
João Victor Martins Author

Thank's ma friend!

Collapse
freeluke_ profile image
Lukas Henrique

Excelente abordagem. Parabéns

Collapse
j_a_o_v_c_t_r profile image
João Victor Martins Author

Obrigado, Lukas!! Abraço!!