Correspondência de Padrões
Parte da seção Lógica e Fluxo do Journey de Java da Coddy — lição 37 de 59.
A correspondência de padrões no Java permite que você teste se um objeto possui um tipo específico e extraia componentes dele. Ela simplifica as operações de verificação de tipo e casting.
Vamos ver como usar pattern matching com instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str é automaticamente convertido para String
System.out.println(str.toUpperCase());
}Após executar o código acima, a saída é:
"HELLO"
Você também pode usar correspondência de padrões em expressões switch:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Após executar o código acima, result contém:
“Number: 42”
Desafio
FácilCrie um método chamado processValue que recebe um argumento:
- Um
Object(value) que pode ser de diferentes tipos
O método deve usar pattern matching com instanceof para processar o valor e retornar uma string com base nessas regras:
- Se for um Integer: retorne "Number: " seguido do valor dobrado
- Se for uma String: retorne "Text: " seguido do valor em maiúsculas
- Se for um Boolean: retorne "Boolean: " seguido do valor oposto (true vira false e vice-versa)
- Para qualquer outro tipo: retorne "Unknown"
Folha de consulta
O pattern matching no Java permite testar se um objeto tem um tipo específico e extrair componentes dele usando instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str é automaticamente convertido para String
System.out.println(str.toUpperCase());
}Você pode encadear múltiplas verificações de pattern matching:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Experimente você mesmo
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Utilize a correspondência de padrões com instanceof para processar o valor
// Se for um Integer: retorne "Number: " + (value * 2)
// Se for uma String: retorne "Text: " + value.toUpperCase()
// Se for um Boolean: retorne "Boolean: " + (!value)
// Para qualquer outro tipo: retorne "Unknown"
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
String inputValue = scanner.nextLine();
Object value = switch(type) {
case "Integer" -> Integer.parseInt(inputValue);
case "String" -> inputValue;
case "Boolean" -> Boolean.parseBoolean(inputValue);
default -> inputValue;
};
System.out.println(processValue(value));
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Arrays Multidimensionais
Básicos de Arrays 2DAcessando Elementos de Arrays 2DLoops Aninhados com Arrays 2DResumo - Arrays 2DAdição e Subtração de MatrizesArrays EscalonadosArrays 3D e AlémPadrões Comuns de Arrays 2DResumo - Tudo Sobre Arrays2HashMap Parte 1
O que é um HashMap?Declarar um HashMapAcessando ValoresVerificar se a Chave ExisteModificando DicionáriosResumo - HashMap3HashMap Parte 2
Métodos do HashMapIterar com keySet()Iterar com entrySet()HashMap AninhadoResumo - Gerenciar ArmazémResumo - Operações do HashMap6Fluxo de Controle Avançado
Declarações RotuladasExpressão SwitchCorrespondência de PadrõesCláusulas de GuardaResumo - Fluxo de Controle9Projeto - Contador de Palavras Únicas
Entrada e Armazenamento de TextoProcessamento de Palavras