[vc_row][vc_column][vc_column_text]Esta es la tercera parte del artículo Nueve nuevas funcionalidades del JDK 9, en esta revisaremos:
- Las nuevas mejoras al lenguaje (JEP 213)
- Sugerencias al Spin-Wait (JEP 285)
- Manejo de variables (JEP 193)
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Milling Project Coin (JEP 213)
Uno de los cambios más significativos en JDK 7 fue el proyecto Coin, que era un conjunto de pequeños cambios en el lenguaje para mejorar tareas que los desarrolladores realizaban en forma repetida. El proyecto incluye mejoras tales como la habilidad de utilizar cadenas como constantes en la sentencia switch. JDK 9 se basa en eso y agrega pequeños cambios a la sintaxis del lenguaje:
- Variables finales se pueden utilizar en try-with-resources sin ser reasignadas. Actualmente si una variable se desea utilizar, esta se debe asignar a una nueva variable, incluso si la variable ha sido definida en el método. A continuación un ejemplo:
1 | try(Resource r = alreadyDefinedResource) ... |
En JDK 9, se convierte en:
1 | try(alreadyDefinedResource) ... |
- Métodos privados pueden ser utilizados en interfaces. En JDK 8 las interfaces cambiaron de forma significativa. Primero, se agregaron los métodos default, lo que significa que se puede agregar comportamiento en una interface, con lo cual fue lógico agregar métodos static. En JDK 9, la introducción de métodos privados en las interfaces permite agregar código en común que se extraerá de los métodos y permanecerá encapsulado dentro de la interface.
- El operador diamante puede ser utilizado con clases anónimas. Una de las mejoras incluidas en JDK 8 y ahora JDK 9 es mejorar la inferencia de tipo. Siendo capaz de utilizar las expresiones lambda sin una especificación de los tipos de los parámetros es un buen ejemplo de esto.
- El guion abajo ya no se encuentra disponible como un identificador.
- Se permite el uso extendido de la anotación @SafeVarargs. Actualmente, esta anotación se puede utilizar solo en los constructores, métodos static y métodos del tipo final, ninguno de estos puede ser sobre escritos. Considerando que los métodos private no pueden ser sobre escritos por una sub clase, es lógico que los métodos private puedan utilizar esta anotación.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Sugerencia Spin-Wait (JEP 285)
Este es un pequeño cambio porque sólo agrega un método, pero esta adición es significante para la clase Thread.
El método onSpinWait() proporciona una mejora a la JVM para el hilo que se encuentra ejecutándose en el procesador. Si la JVM y el hardware soportan esta optimización, esta mejora se aplica, en caso contrario se ignora. Esta mejora incluye reducir la espera entre hilo e hilo y reduce el consumo de energía.
Manejo de Variables (JEP 193)
Uno de los cambios más significativos en JDK 9 ocasionado por la modularización de las principales librerías del JDK es el encapsulamiento de los APIs internos por defecto. Probablemente la más conocida de estas es sun.misc.Unsafe. Para hacer que esta funcionalidad se encuentre disponible en un API público, JDK 9 introduce la clase VarHandle.
Las variables son utilizadas en Java todo el tiempo. Existen apuntadores específicos hacia áreas de memoria para almacenar estos valores. Un VarHandle es un tipo de referencia a estas variables.
A fin de obtener la referencia a una VarHandle, se utiliza la clase MethodHandle.Lookup la cual es heredada en JDK 9. Se pueden devolver referencias a variables static y nonstatic, según como se requiera, así como a matrices.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Este artículo es la tercera parte del artículo Nueve Nuevas Funcionalidades del JDK 9, puede revisar las otras dos partes en: Nueve Nuevas Funcionalidades del JDK 9 – 1 y Nueve Nuevas Funcionalidades del JDK 9 – 2.[/vc_column_text][/vc_column][/vc_row]