Con la reciente publicación de Java 10 iba a publicar un resum de las novedades y me he dado cuenta que no lo había hecho para Java 9. Ojo, esto no es un resumen exhaustivo. Como todo en este blog escribo más para mí que de manera general. Así que es la lista de temas que me interesa o que me parece que voy a utilizar más, a modo de referencia.

Así que ahí vamos, de manera muy resumida.

Literales para definir colecciones

Para definir listas, conjuntos y mapas de un tamaño predefinido. Métodos Set.of(), List.of() y Map.of().

Streams

Nuevos métodos en streams, como por ejemplo dropWhile o takeWhile.

    IntStream.range(1, 10).dropWhile(x -> x < 5).forEach(System.out::println)
    
    IntStream.iterate(0, x -> x < 3, x -> x + 1).forEach(System.out::println)

Optionals

También ampliaciones en los Optional como el método or() o la posibilidad de convertirlo fácilmente en un stream con stream().

Métodos privados en interfaces

Ampliando la funcionalidad de añadir métodos en los interfaces introducida en Java 8 ahora podemos crear métodos privados que nos permiten organizar mejor el código de los métodos públicos de la interfaz.

Variables efectivamente finales en try-with-resources

Hasta ahora teníamos que definir una nueva variable para utilizar el mecanismo de try-with-resources. Ahora podemos usar cualquier variable efectivamente final lo que significa que sólo se le hace una asignación.

    // Hasta Java 8
    try ( FileReader fr = new FileReader("datos.txt") ) {
        // código que utiliza fr
    }
    
    // Desde Java 9
    FileReader fr = new FileReader("datos.txt");
    try ( fr ) {
        // código que utiliza fr
    }

Sistema modular (Project Jigsaw)

El cambio principal. Es tan gordo que ni me meto con ello. Una capa más de encapsulación sobre el class loader. Ahora hay módulos que buscan ser librerías o piezas de librerias. Los módulos exportan paquetes y los importan, o requieren, lo cual les permite utilizarlos. En teoria mejora la encapsulación y separación. En la práctica parece que es un lío tremendo.

jshell

Se trata de un REPL (de read eval print loop) o como su nombre indica un entorno de linea de comandos para ejecutar pequeños fragmentos de código de una manera sencilla y directa.

Property resource bundles en UTF-8

La codificación hasta ahora era, obligatoriamente, ISO-8859-1. Pasa a UTF-8 lo que es una excelente notícia.

Referencias