Pular para o conteúdo principal

Java 16 - Pattern Matching for instanceof

 


Java 16 - Pattern Matching for instanceof


Este é mais um recurso introduzido no Java 14 como preview e continuou assim até ser liberado definitivamente no Java 16.

O objetivo é deixar o instanceof mais simples e seguro uma vez que o “cast” é feito em tempo de compilação. Mas não é apenas isso...

public class Animal {

  public void dizerOla(Animal animal) {
      if (animal instanceof Cao cao) {
          cao.latir();
      } else if (animal instanceof Gato gato) {
          gato.miar();
      }
  }

}

Ainda podemos utilizar expressões mais complexas para validar a instância

} else if (animal instanceof Gato gato && gato.getIdade() > 5) {

Neste caso, podemos ter algumas restrições quanto às expressões após o instanceof. Por exemplo, não podemos utilizar a expressão ||. A explicação para isso é que por causa da semântica do operador ||, a variável padrão gato pode não ter sido atribuída e, portanto, a análise de fluxo determina que a variável gato não está no escopo no lado direito do operador ||.

} else if (animal instanceof Gato gato || gato.getIdade() > 5) {

    >> Cannot resolve symbol 'gato'

O código acima não compila, pois não se pode ter certeza que a variável gato será atribuída.

Conclusão

Esta mudança não é simplesmente para deixar o instanceof mais simples e sim permitir que os records, expressões switch e futuramente padrões de desconstrução tão fácil como construir um objeto.

Referências

https://openjdk.java.net/jeps/394

https://www.infoq.com/articles/java-pattern-matching/


Comentários

Postagens mais visitadas deste blog

Java Records

  Java Records Imutável, Simples e limpa Esta funcionalidade da linguagem apareceu pela primeira vez na versão 14 como experimental e assim continuou até a versão 15 . Agora liberada de forma definitiva no Java 16 . O objetivo é ser possível ter classes que atuam como portadores transparentes de dados imutáveis. Os registros podem ser considerados tuplas nominais. Ou seja, após criado, um record não pode mais ser alterado. Records oferece uma uma sintaxe compacta para declarar classes que são portadores transparentes para dados imutáveis superficiais visando reduzir significamente o detalhamento dessas classes e irá melhorar a capacidade de leitura e manutenção do código. Vamos seguir um exemplo de uma classe chamada Pessoa . O primeiro exemplo vamos utilizar o modo tradicional. public class Pessoa { private String nome; private int idade; public Pessoa (String nome, int idade) { super (); this .nome = nome; this .idade = idade; } public String g...

Livro Gratuito de Logica de Programação em Java

O pessoal da Algaworks disponibilizou um PDF para quem está iniciando com Java e precisa aprender lógica de programação com Java. Segue o link para o PDF http://cafe.algaworks.com/livro-logica-de-programacao/ O que você vai aprender nesse livro gratuito? 1. Introdução 1.1. O que é um algoritmo 1.2. Linguagens de programação 1.3. Instalando o Java 1.4. O famoso “Olá mundo!” 1.5. Executando o primeiro algoritmo 1.6. Palavras reservadas do Java 1.7. Fazendo comentários em um programa Java 2. Variáveis e constantes 2.1. Tipos de dados existentes 2.2. Escolhendo bons nomes para variáveis e constantes 3. Operadores 3.1. Operadores aritméticos 3.2. Operadores de atribuição 3.3. Operadores relacionais 3.4. Operadores lógicos 4. Estruturas de decisão 4.1. Estrutura “if” 4.2. Estrutura “switch” 5. Iteração 5.1. Iterando com o “for” 5.2. Iterando com o “while” 6. Conclusão 6.1. Próximos passos Fonte : algaworks

Java 8 ao 18: Mudanças mais importantes na plataforma Java

    Vamos rever muitas das mudanças mais importantes na plataforma Java que aconteceram entre a versão 8 (2014) e 18 (2022)   O Java 8 foi lançado em março de 2014 e o Java 18 em março de 2022. São 8 anos de progresso, 203 JEPs (JDK Enhancement Proposals ), entre essas duas versões. Neste post, revisaremos as mudanças mais importantes e discutiremos os benefícios e desafios da adoção de versões mais recentes do JDK para novos aplicativos e para os mais antigos compilados com versões mais antigas. Desde a versão 9, o Java tem novos recursos a cada 6 meses e é muito difícil acompanhar essas novas mudanças. A maioria das informações na internet descreve as mudanças entre as duas últimas versões do Java. No entanto, se você estiver em uma situação semelhante à minha, não está usando uma das versões mais recentes do Java, mas uma das várias versões anteriores (Geralmente 8 ou 11 que são as versões de suporte estendido). Então é útil saber quais novos recursos foram...