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 en Java permite comprobar si un objeto tiene un tipo específico y extraer componentes de él. Simplifica las operaciones de verificación de tipos y 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, la salida es:

"HELLO"

También puedes usar coincidencia de patrones en expresiones 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";
}

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 tome un argumento:

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

El método debe usar coincidencia de patrones con instanceof para procesar el valor y devolver un string basado en estas reglas:

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

Hoja de referencia

La coincidencia de patrones en Java permite comprobar si un objeto tiene un tipo específico y extraer componentes de él usando instanceof:

Object obj = "Hello";
if (obj instanceof String str) {
   // str is automatically cast to String
   System.out.println(str.toUpperCase());
}

Puedes encadenar múltiples comprobaciones de coincidencia de patrones:

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

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: return "Number: " + (value * 2)
        // Si es un String: return "Text: " + value.toUpperCase()
        // Si es un Boolean: return "Boolean: " + (!value)
        // Para cualquier otro tipo: return "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