Un logotipo con el texto blog.marcnuri.com
English
Inicio»Desarrollo Backend»Pattern Matching para instanceof en Java

Entradas Recientes

  • ¡Fabric8 Kubernetes Client 8.0 está disponible!
  • ¡Fabric8 Kubernetes Client 7.9 está disponible!
  • ¡Eclipse JKube 1.20 está disponible!
  • Project, Agent, Person: El Eje que Falta en Herramientas de Programación con IA
  • ¡Fabric8 Kubernetes Client 7.8 está disponible!

Categorías

  • Antiguo
  • Cloud Native
  • Desarrollo Backend
  • Desarrollo Frontend
  • Herramientas
  • Ingeniería de calidad
  • Inteligencia Artificial
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales
  • Reflexiones sobre Ingeniería

Archivos

  • septiembre 2026
  • julio 2026
  • junio 2026
  • mayo 2026
  • abril 2026
  • marzo 2026
  • febrero 2026
  • enero 2026
  • diciembre 2025
  • octubre 2025
  • septiembre 2025
  • julio 2025
  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • septiembre 2022
  • agosto 2022
  • julio 2022
  • junio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • enero 2021
  • diciembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • septiembre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • mayo 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • noviembre 2014
  • octubre 2014
  • marzo 2014
  • agosto 2012
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Pattern Matching para instanceof en Java

2022-03-12 en Desarrollo Backend etiquetado Java / Java 17 por Marc Nuri | Última actualización: 2025-01-25
English version

Introducción

⁠

Java, a pesar de ser un lenguaje maduro, sigue evolucionando para acoger paradigmas de programación modernos y las mejores prácticas. Muchas de estas mejoras se centran en mejorar la productividad del desarrollador y la legibilidad del código.

Una de estas características se liberó finalmente en Java 16 y se mejoró aún más en Java 17: JEP 394: Pattern Matching for instanceof.

Esta funcionalidad simplifica la escritura de lógica condicional que implica comprobaciones de tipo y casting, haciendo el proceso más conciso y expresivo.

¿Qué es el Pattern Matching?

⁠

El pattern matching es un recurso de programación que permite a los desarrolladores probar un objeto contra un patrón específico. Si el objeto coincide con el patrón, se pueden realizar ciertas operaciones en él, como extraer sus propiedades o convertirlo a un tipo específico. Este enfoque simplifica la lógica condicional al combinar la comprobación de tipos, el casting y la declaración de variables en una sola operación más concisa.

Muchos lenguajes de programación, como Scala, Kotlin y Haskell, han implementado el pattern matching como una característica fundamental. Con la introducción de JEP 394, Java ha adoptado este paradigma, ofreciendo a los desarrolladores un enfoque más moderno y sencillo para la comprobación de tipos.

El problema con el tradicional instanceof

⁠

En Java tradicional, comprobar el tipo de un objeto requiere dos pasos:

  1. Utilizar el operador instanceof para verificar el tipo.
  2. Convertir explícitamente el objeto al tipo deseado.

Aquí tienes un ejemplo:

TraditionalInstanceOf.java
public class TraditionalInstanceOf {
    public static void main(String[] args) {
        Object object = "Hello, World!";
        if (object instanceof String) {
            String string = (String) object; // Explicit cast is required
            System.out.println(string.toUpperCase());
        }
    }
}

Aunque funcional, este enfoque tiene un par de inconvenientes:

  1. Repetición: La variable object se referencia varias veces: una vez en la comprobación de instanceof y de nuevo durante el casting.
  2. Verbosidad: El casting explícito añade un boilerplate innecesario, reduciendo la legibilidad.

Pattern Matching para instanceof

⁠

JEP 394 elimina la necesidad de comprobaciones de tipo repetitivas y redundantes al introducir una sintaxis mucho más limpia e intuitiva. Con esta funcionalidad, puedes combinar la comprobación de tipos, el casting y la declaración de variables en una sola operación.

Las principales ventajas del pattern matching para instanceof incluyen:

  1. Reducción de boilerplate: Ya no es necesario escribir el nombre del tipo varias veces, lo que hace que tu código sea más conciso y directo.
  2. Mejora de la legibilidad: El código es más fácil de leer y entender, ya que la comprobación de tipos y el casting se combinan en una sola operación.
  3. Código más seguro: Dado que la comprobación de tipos y el casting se agrupan, no hay posibilidad de tipos incompatibles o de olvidar actualizar un casting si el código circundante cambia.

El siguiente fragmento de código muestra cómo utilizar el pattern matching para instanceof:

PatternMatchingInstanceOf.java
public class PatternMatchingInstanceOf {
    public static void main(String[] args) {
        Object object = "Hello, World!";
        if (object instanceof String string) {
            System.out.println(string.toUpperCase());
        }
    }
}

En esta versión, podemos ver las siguientes mejoras:

  1. El operador instanceof no solo comprueba el tipo, sino que también declara e inicializa una nueva variable (string) si la comprobación es correcta.
  2. La variable string se convierte automáticamente al tipo adecuado (String) dentro del ámbito del bloque if.

Conclusión

⁠

Pattern Matching para instanceof representa un significativo salto hacia un código Java más expresivo y conciso. Al reducir el boilerplate y aclarar cómo las variables están limitadas a sus bloques condicionales, aporta una sensación limpia y moderna a la comprobación de tipos cotidiana. JEP 394 finaliza esta característica en Java 16, demostrando el compromiso continuo de Java de mejorar la productividad del desarrollador con cada versión.

Referencias

⁠
  • JEP 394: Pattern Matching for instanceof
  • JEP 375: Pattern Matching for instanceof (Second Preview)
  • JEP 305: Pattern Matching for instanceof (Preview)
Icono de TwitterIcono de FacebookIcono de LinkedInIcono de PinterestIcono de correo electrónico

Navegador de artículos
¡Eclipse JKube 1.7.0 está disponible!Generics en Go: Introducción Completa a Type Parameters en Go 1.18+
© 2007 - 2026 Marc Nuri