[vc_row][vc_column width=»2/3″][vc_column_text]
La más grande nueva funcionalidad en JDK 9 es la Java Platform Module System en conjunto con la introducción al JDK modular. Sin embargo hay muchas más funcionalidades en JDK 9, en este caso revisaremos nueve que son particularmente interesantes para los desarrolladores.
[/vc_column_text][/vc_column][vc_column width=»1/3″][vc_single_image image=»981″ img_size=»large» alignment=»center»][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Factory Methods para Collections (JEP 269)
Collections proporciona una forma adecuada de entender los grupos de elementos en las aplicaciones y luego manipular la data en una variedad de formas útiles.
En el nivel más alto, se tienen interfaces que representan conceptos abstractos como List, Set y Map.
El problema, hasta ahora, es que Java no proporcionaba una manera simple de crear una colección con data predefinida. Si se quiere un colección que sea estructuralmente inmutable, se requiere realizar más trabajo.
Observemos un ejemplo en JDK 8:
1 2 3 4 5 6 | List<Point> myList = new ArrayList<>(); myList.add(new Point(1,1)); myList.add(new Point(2,2)); myList.add(new Point(3,3)); myList.add(new Point(4,4)); myList = Collections.unmodifiableList(myList); |
Esto no es terrible, mas para crear una lista de cuatro Points inmutables se requiere seis líneas de código. JDK 9 realiza esto a través de un método para collections.
Esta funcionalidad hace uso de un cambio que se introdujo en JDK 8 que permite utilizar métodos estáticos en las interfaces. Este cambio significa que se pueden agregar los métodos necesarios en las interfaces de nivel más alto(Set, List y Map), de esta forma no se tienen que agregar los métodos en las clases que implementan estas interfaces.
Volvamos a escribir el código en JDK 9:
1 2 | List list = List.of(new Point(1,1), new Point(2,2), new Point(3,3), new Point(4,4)); |
Las reglas que aplican para la creación de un collection, también aplican en este caso.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Mejoras en las clases Optional
La clase Optional fue agregada en JDK 8 para reducir el número de lugares donde puede ocurrir un NullPointerException (Y es utilizado frecuentemente para hacer al API Stream más robusto).
JDK 9 agrega nuevos métodos a la clase Optional:
- ifPresent(Consumer action): Si hay un valor presente, realizar la acción con el valor presente.
- ifPresentOrElse(Consumer action, Runnable emptyAction): Similar a ifPresen, pero si no hay un valor, se ejecuta emptyAction.
- or(Supplier supplier): Este método es útil cuando te quieres asegurar que siempre tengas un Optional. El método or() devuelve el mismo Optional si el valor está presente; en otro caso devuelve un nuevo Optional generado por el supplier.
- stream(): Devuelve un stream de cero o un elemento, dependiendo de si hay un valor.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
El post se encuentra basado en Nine New Developer Features in JDK 9 de Java Magazine de Oracle.[/vc_column_text][/vc_column][/vc_row]