Skip to content

Java 25

1.Principales Novedades

1.1 Pattern matching

El uso de records inmutables (java 14) y su uso mediante pattern matching nos permitió facilitar mucho el trabajo de deconstrucion y acceso a variable.

public record Spain (String name) {}
Si juntamos esto con sealed interfaces, podemos construir un lenguaje mas robusto y no tolerante a fallos.

public sealed interface Country permits Spain, France {
    String name();
}

public record Spain(String name) implements Country {
    //autogenerated name()
}
public record Spain(String name) implements Country {
     //autogenerated name()
}
En java 25 ademas han añadido una ventaja en bloques switch para usar Pattern Matching y permiten ignorar valores no usados con el patron _ (aunque es necesario declararo en orden del contructor del record para que encuentre la referencia).

1.2 Swith directo a las propiedades del record

  • Agrupación de alternativas en switch, reduciendo código duplicado.

1.3 Nuevo Main menos verbose

  • Main minimalista y programas sin clase obligatoria, más cercanos a otros lenguajes modernos.

1.4 Scoped Values (JEP 487)

El uso de variables a nivel Thread Local fue un gran avance, pero su baja compatibilidad con Virtual Threads ha llevado a la creacion del homonimo Scoped Values que trabajan perfectamente con Virtual Threads.

1.5 Module import (JEP 511)

Antes era necesario declarar explicitamente paquetes y clases de modulos, ahora con indicar el modulo, el compilador es capaz de detectar que imports son necesarios para esa clase y el realizará ese trabajo mas eficiente y automatico por nosotros

1.6 JSpecify @Nullable

Para mitigar el null-safety se introduce la posibilidad de analizar el codigo estaticamente y que los IDE puedan especificamente indicar como debe tratarse una variable que puede ser nullable, no dejando la compilacion si no se maneja correctamente, evitando asi los null pointer en runtime, ya que en compilacion no se dejan pasar.