A logo showing the text blog.marcnuri.com
English
Inicio»Java»Pattern Matching para instanceof en Java

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • 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
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 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
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • 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 Java etiquetado Java / Java 10 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)
Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Eclipse JKube 1.8.0 está disponible!Eclipse JKube 1.7.0 está disponible!
© 2007 - 2025 Marc Nuri