Novedades Java 17

Seguramente muchos programadores Java estén habituados ya a Java 8 con sus expresiones lambda, los Optional, la programación funcional, los streams y los métodos default de las interfaces entre otras características del lenguaje.

Incluso, habrá otros programadores que ya les sea familiar el Java 11. Con la suma de características de Java 9 y Java 10. Entre las que se encuentran: el sistema modular, los métodos privados de las interfaces, helper methods para las Collections, los Optional to Stream, la inferencia de tipos en variables locales, el método Not Predicate entre otras innumerables mejoras tanto de características previamente introducidas como de rendimiento.

Pero, de seguro, solo los más curiosos y avezados programadores conocerán las mejoras de Java 17 y anteriores versiones desde la 11.

Alexandre García Boté
Alexandre García BotéArquitecto de Desarrollo de Software

Sistema de releases

Es que, desde hace ya varios años, desde la versión 9 que Oracle está lanzando una nueva versión mayor de Java cada 6 meses y una versión Long Time Support (LTS) cada 3 años. Es por eso que las compañías han ido adoptando nuevas versiones de Java en cada versión LTS.

Si miramos los productos como Spring, por ejemplo, veremos que ofrecen soporte a Java 8 y Java 11. Pero sucede lo mismo con los servidores de aplicaciones Weblogic o WebSphere.

Java 11 se ha convertido en el estándar Java de facto hasta la actualidad y, seguramente, perdure algún año más.

Recientemente, en septiembre, Oracle ha publicado la nueva versión de Java 17, la cual también será una LTS y, por tanto, es de esperar que se convierta en el nuevo estándar.

Además, a partir de Java 17, Oracle ha decido sacar versiones LTS cada 2 años en lugar de cada 3. O sea que la próxima versión LTS será la 21.

Cambio de licencia

Hay que recordar, que a partir de Java 11, la licencia para instalar el JDK de Oracle en servidores de producción era de pago. Esto se revierte en la versión 17 que pasa a ser gratuita hasta un año entero después de la publicación de la siguiente versión LTS.

Esto ayudará a adoptarla como versión estándar de Java en los productos. De hecho, Spring ya ha decido que la versión de Java soportada será la 17 para Spring 6 y Spring Boot 3 que tiene pensado lanzar en el cuarto trimestre del año que viene.

¿Cuáles son las novedades de Java 17?

Repasemos las principales características introducidas de la versión 12 a la 16:

  • Uso de lambdas en las instrucciones switch: Se puede usar la sintaxis de las lambdas dentro de instrucciones switch, evitando los errores típicos con el break.

  • Strings multilínea: En lugar de concatenar varias líneas, se puede usar el operador “”” (3 comillas dobles) para definir un texto de varias líneas.

  • NullPointerException mejoradas: Cuando sucede una excepción NullPointerException, el compilador indica la variable que provoca el error.

  • Pattern matching en instanceof: Se permite el cast automático en instanceof.

Se puede usar s como String porque ha hecho match con la expresión del if.

  • Record clases: Las clases del tipo Record permiten usar el mínimo boilerplate code para las clases POJO.

  • Otras funcionalidades, añadidos nuevos métodos en Stream, Collections y String
  • Otras mejoras de rendimiento

En la versión 17, se han implementado 14 JEPs (JDK Enhancement Proposal o Propuesta de mejora de la JDK). Además de diversas mejoras de rendimiento y seguridad.

Las propuestas de mejora implementadas son las siguientes:

  • Restore Always-Strict Floating-Point Semantics
  • Enhanced Pseudo-Random Number Generators
  • New macOS Rendering Pipeline
  • macOS/AArch64 Port
  • Deprecate the Applet API for Removal
  • Strongly Encapsulate JDK Internals
  • Pattern Matching for switch (Preview)
  • Remove RMI Activation
  • Sealed Classes
  • Remove the Experimental AOT and JIT Compiler
  • Deprecate the Security Manager for Removal
  • Foreign Function & Memory API (Incubator)
  • Vector API (Second Incubator)
  • Context-Specific Deserialization Filters

Esta última versión se caracteriza por llevar a la versión final muchas de las características introducidas en versiones anteriores como preview, por tanto, no será necesario indicar el flag –enable-preview para usarlas. Si bien, también se introducen nuevas características preview.

La lista completa con los detalles la puedes ver aquí, pero te comento las nuevas características del lenguaje añadidas a continuación:

  • Pattern matching en el switch: Se añade como característica preliminar la posibilidad de usar el cast automático dentro del case de la misma manera que en el instanceof. Ahora puedes usar switch para testear el tipo de dato.

  • Sealed classes (clases selladas): Se añade definitivamente la característica introducida como preliminar en la versión 15 que permite identificar qué clases podrán heredar de la clase marcada como sealed aunque ésta se mantenga pública.

NovedadesJava17-7

En este caso, la clase Animal sólo puede ser extendida por las clases Gato, Perro y Canario.

También puedes ver el detalle de todas las nuevas características introducidas desde la versión 11.

Resumiendo las novedades de Java 17

Si bien es cierto que en la versión Java 17, no se introducen muchas novedades en el lenguaje, lo realmente importante es que será la siguiente versión LTS y, por tanto, la versión acumulativa que integrará las diferentes mejoras ya comentadas y en la que se dará un largo soporte. Lo cual, la reforzará como nueva versión Java de facto. Además, no hay que quitarle importancia a las innumerables mejoras de rendimiento y seguridad que aportan todas y cada una de las nuevas versiones.

Con la introducción del nuevo ciclo de versiones LTS cada 2 años, se facilitará la evolución de las aplicaciones, las tecnologías y las herramientas que usamos. La comunidad irá adoptando los nuevos estándares más rápido y sin la barrera económica debido a introducción de la nueva licencia de uso.

¿A qué esperas para probar la nueva versión de Java 17?

2021-11-17T14:57:26+02:0017 noviembre, 2021|

¡Compártelo en tus redes sociales!

Ir a Arriba