Menu
Coddy logo textTech

Coincidencia de Patrones

Parte de la sección Lógica y Flujo del Journey de Java de Coddy — lección 37 de 59.

La coincidencia de patrones (pattern matching) en Java permite comprobar si un objeto tiene un tipo específico y extraer componentes del mismo. Simplifica las operaciones de comprobación de tipos y de conversión (casting).

Veamos cómo usar la coincidencia de patrones con instanceof:

Object obj = "Hello";
if (obj instanceof String str) {
   // str se convierte automáticamente a String
   System.out.println(str.toUpperCase());
}

Después de ejecutar el código anterior, el resultado es:

"HELLO"

También puedes encadenar comprobaciones de coincidencia de patrones con else if:

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";
}

Después de ejecutar el código anterior, result contiene:

“Number: 42”

challenge icon

Desafío

Fácil

Crea un método llamado processValue que recibe un argumento:

  1. Un Object (value) que podría ser de diferentes tipos

El método debe usar pattern matching con instanceof para procesar el valor y devolver una cadena basada en estas reglas:

  • Si es un Integer: devuelve "Number: " seguido del valor duplicado
  • Si es un String: devuelve "Text: " seguido del valor en mayúsculas
  • Si es un Boolean: devuelve "Boolean: " seguido del valor opuesto (true se convierte en false y viceversa)
  • Para cualquier otro tipo: devuelve "Unknown"

Pruébalo tú mismo

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO: Usa pattern matching con instanceof para procesar el valor
        // Si es un Integer: devuelve "Number: " + (value * 2)
        // Si es un String: devuelve "Text: " + value.toUpperCase()
        // Si es un Boolean: devuelve "Boolean: " + (!value)
        // Para cualquier otro tipo: devuelve "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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo