Menu
Coddy logo textTech

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”

challenge icon

Desafio

Fácil

Crie um método chamado processValue que recebe um argumento:

  1. 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));
    }
}
quiz iconTeste seus conhecimentos

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