Oracle ha publicado JDK 21, que dependiendo del prisma por el que se mire puede ser entendido como OpenJDK 21 o Java 21. Una vez más, recordamos que OpenJDK es la base de la implementación comercial de Java desde la versión 7, así que las dos grandes vertientes de la tecnología están conectadas desde hace muchos años.
Java sigue una cadencia de lanzamientos de seis meses desde hace bastante tiempo. Esto ha permitido a la tecnología evolucionar a mayor velocidad, pero con el coste de introducir una menor cantidad de novedades y cambios en cada versión. Por otro lado están las modificaciones introducidas en la licencia de la versión comercial, las cuales en su momento generaron bastante controversia, pero en el fondo no son algo tan dramático si uno migra a OpenJDK, cuya publicación bajo la licencia GPLv2 minimiza las probabilidades de que Oracle imponga restricciones muy severas.
De entre todo lo nuevo que ha sido introducido en Java 21, que ha sido bastante, lo primero que se puede destacar es la presencia en fase previa de las plantillas para las cadenas de caracteres (strings), que simplifican la escritura de los programas en Java al facilitar la expresión de cadenas que incluyen valores calculados en tiempo de ejecución y mejoran la legibilidad de las expresiones que mezclan texto y expresiones.
Otro aspecto de las plantillas para las cadenas de caracteres son la mejora de la seguridad de los programas que componen cadenas a partir de valores proporcionados por el usuario y que pasan a otros sistemas (por ejemplo creando una consulta a base de datos) gracias a que soportan la validación y la transformación tanto de la plantilla como de los valores de las expresiones integradas, cosa a la que se suma la simplificación del uso de API que aceptan cadenas escritas en lenguajes distintos a Java.
La segunda novedad que se puede resaltar de Java 21 son los patrones de registro, que, mediante coincidencia de patrones, permiten desestructurar instancias de clases de registro, lo que abre la puerta a consultas de datos más sofisticadas. Los patrones de registro y los patrones de tipos se pueden anidar para permitir una forma más poderosa, declarativa y componible de navegación y procesamiento de datos.
La coincidencia de patrones también ha llegado a las sentencias y las expresiones switch
, permitiendo así probar una expresión con un varios patrones, cada una con una acción específica, de modo que las consultas complejas orientadas a datos se puedan expresar de manera concisa y segura.
Otra cosa que ha llegado en fase previa son los patrones y las variables sin nombre. Los primeros coinciden con un componente de registro sin indicar el nombre el tipo del componente, mientras que las segundas se pueden inicializar, pero no utilizar. Ambos son indicados con el carácter de subrayado o guion bajo, _
.
Y seguimos con más características en fase previa, en esta ocasión las clases sin nombre y los métodos de instancia main
, que básicamente se encargan de reducir la cantidad de código necesario para escribir programas simples. Con esto se pretende facilitar la entrada a Java a los novatos, principalmente a estudiantes. Por ejemplo, el siguiente programa:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Pasaría a ser así:
class HelloWorld { void main() { System.out.println("Hello, World!"); } }
Los hilos virtuales, que llegaron en segunda fase previa en Java 20, ya son considerados como una característica estable en Java 21, y básicamente son hilos ligeros que reducen de manera notable el esfuerzo de escribir, mantener y observar aplicaciones simultáneas de alto rendimiento, principalmente orientadas a servidores y entornos como la nube.
Las colecciones secuenciadas permiten mejorar la productividad del desarrollador mediante el ofrecimiento de un conjunto uniforme de operaciones que se aplican a través de una colección de tipos que representan una secuencia de elementos con un orden de encuentro definido. Por otro lado, se ha buscado mejorar el desempeño de las aplicaciones extendiendo el Recolector de Basura Z (ZGC) para mantener separadas las generaciones de objetos tanto jóvenes como antiguos.
Como últimas cosas destacables de Java 21 se pueden mencionar la introducción de una API para los mecanismos de encapsulación de claves, que son una técnica de cifrado para proteger claves simétricas mediante el uso de criptografía de clave segura, y el hecho de que la API de vectores está en la sexta fase incubación.
Todos los detalles sobre Java 21 pueden ser consultados a través de las notas de lanzamiento disponibles en la web de OpenJDK y en la entrada publicada en el blog oficial de Java. La versión software libre del JDK puede ser obtenida desde el sitio web de Java (alternativamente y extraoficialmente desde Adoptium) y la comercial desde la web de Oracle.