Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

Java 18 ya está aquí, con un servidor web para pruebas y desarrollo

Imagen ornamental

La última versión de Java, Java 18, ya está disponible para descarga al igual que el correspondiente OpenJDK. Esta nueva versión forma parte del ciclo de lanzamientos semestral con el que ya llevan 4 años, en virtud del cual lanzan una nueva versión "major" cada 6 meses, haga falta o no, como en el chiste:

El ciclo de lanzamientos de versiones de Java, desde marzo de 2018

Esta versión 18 no tiene soporte a largo plazo (LTS), como sí lo tuvo la anterior, y cuenta con nueve mejoras o añadidos, aunque a decir verdad uno de estos es en realidad algo que se marca como obsoleto: los finalizadores en estructuras de captura de excepciones (try-catch-finally, interesante lectura), por lo que novedades y mejoras solo son 8 (y de estas 3 son experimentales).

Un nuevo servidor web simple para desarrollo

La más llamativa de las novedades es, probablemente, la disponibilidad de un nuevo servidor Web simple, integrado en la plataforma, y pensando para que lo utilicemos durante el desarrollo con el fin de facilitar el prototipado de aplicaciones y las pruebas.

Lo único que tenemos que hacer para lanzarlo es escribir esto en la línea de comandos de la carpeta de nuestro proyecto:

jwebserver

y se abrirá en el puerto 8000 con nuestra aplicación. También podemos especificar el puerto que nos interese con -p:

jwebserver -p 8080

Está basado en el paquete com.sun.net.httpserver que lleva en la plataforma desde el año 2006 😒Solamente sirve peticiones GET o HEAD, por lo que si enviamos un formulario por POST recibiremos un error 501 - Not Implemented. Menos da una piedra...

Novedades en el "core" de la plataforma Java

En esta nueva versión de Java, se ha establecido UTF-8 como el conjunto de caracteres predeterminado para las API de Java. Esto implica que cualquier API que dependa del juego de caracteres predeterminado se comportará de manera consistente en todas las implementaciones, sistemas operativos, entornos locales y configuraciones. Ya iba siendo hora 😉 y es una gran noticia. La excepción a esto es la Entrada/Salida de la consola, así que ojo con ello.

En esta versión, los métodos de reflexión java.lang.reflect.Method, Constructor y Field se han reimplementado como manejadores de método, unificando la manera de hacerlo para conseguir mayor rendimiento y porque simplifica el código de la Máquina Virtual HotSpot de Java. Se ha hecho en anticipación de nuevas características futuras del lenguaje que harán uso intensivo de eso.

Java 18 también incluye una nueva interfaz de proveedor de servicios (SPI) que se utiliza a la hora de resolver direcciones y que nos permite utilizar tipos de resolución diferentes a los que ofrece la resolución integrada. Esto permite resolver para otros protocolos como DNS sobre TLS o QUIC.

Otras novedades

Si utilizas JavaDoc para documentar tu código, ahora dispones de una nueva etiqueta @snippet que te permitirá incluir ejemplos de código junto con el resto de la documentación. Por ejemplo, algo así:

/**
 * El siguiente código muestra cómo utilizar 
 * la etiqueta {@code Optional.isPresent}:
 * {@snippet :
 * if (v.isPresent()) {
 *     System.out.println("v: " + v.get());
 * }
 * }
 */

Lo que se incluirá en la documentación es lo que va a partir de los dos puntos : tras @snippet y el último cierre de llaves }. El código no se valida, aunque sí tendrá coloreado de sintaxis.

Además se han incluido 3 características adicionales que están en preview o incluso en fase de incubación todavía, a saber:

  • La API de vectores (incubación de tercera fase), que presenta una posible API futura para obtener "una manera confiable e independiente de la plataforma para expresar de manera clara y concisa un montón de tipos de cálculos vectoriales en diferentes arquitecturas".
  • API para función externa y memoria (incubación de segunda fase). Esto ya había aparecido como incubación de fase 1 en Java 17, la versión anterior. Su objetivo es permitir que la plataforma Java pueda interoperar con código fuera del runtime de Java, para llamar a funciones o para acceder de manera segura a la memoria de otros programas. En el enlace tienes muchos más detalles.
  • Coincidencia de patrones para expresiones switch (en segunda preview): algo que tiene C# desde hace casi 3 años en versión definitiva y más completa.

En resumen

Una vez más, a los 6 meses de la anterior y "porque hay que sacarla", una nueva decepcionante versión de la plataforma Java que, a pesar de mostrar a su mascota disparada hacia el espacio, más bien ha dado un saltito para avanzar unos pocos metros. De los 9 cambios, uno es una característica marcada para desaparecer, 3 son experimentales, y las 5 restantes no añaden nada especialmente importante para el día a día de los desarrolladores.

Quizá lo más interesante es tener claro que el finally del try-catch está condenado a desparecer y mejor evitarlo, y por supuesto el hecho de que ahora todo sea UTF-8 por debajo.

José M. Alarcón Aguín Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José M. Alarcón Aguín
Archivado en: Lenguajes y plataformas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.