Java 9 est arrivé !

Par:
fredericmazue

ven, 22/09/2017 - 15:19

Java 9 se sera fait attendre. Après la sortie de Java 8 en 2014, après avoir été retardé plusieurs fois, Java 9 est sorti hier 21septembre.

La note de version est énorme. Java 9 apporte plus de 80 nouveautés correspondant aux implémentations des proposition JEP (Java Enhancement Proposal) récapitulées à cette page.

La nouveauté majeure, LA nouveauté peut-on même dire est incontestablement l'arrivée la modularité avec Jigsaw. Ce sont d'ailleurs de nombreuses discussions et désaccords autour de Jigsaw (6 JEP a lui tout seul) qui ont retardé la sortie de Java 9. Nous vous proposons de prendre contact avec Jigsaw dans ce didacticiel et avec Programmez! 199 et Programmez! 208.

Avec Java 9 les collections sont plus faciles à manipuler, avec un code moins verbeux, ainsi que décrit dans JEP 269. Les interfaces List, Map et Set sont enrichies de méthodes statiques grâce auxquelles vos doigts auront moins de crampes.

Avant java 9 :

Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);

Avec Java 9

Set<String> set = Set.of("a", "b", "c"); 

Java 9 apporte les fichiers JAR multi-versions, décrits dans JEP 238. Le support de versions multiples est indiqué dans la la section principale du fichier Manifest de l'archive JAR comme ceci :

Multi-Release: true

Après quoi les fichiers de classes peuvent être organisés par exemple comme ceci dans l'archive :

jar root
  - A.class
  - B.class
  - C.class
  - D.class
  - META-INF
     - versions
        - 9
           - A.class
           - B.class

C'est-à-dire des classes A,B,C, D à la racine utilisées pour toutes les versions antérieures à Java 9 et des classes C et D utilisées également avec Java 9.

En revanche les classes localisées dans le répertoire META-INF/versions/9 seront chargées et utilisées par Java 9, les classes A et B de la racines restant inutilisées dans ce cas.

Il est même possible de spécifier des fichiers de classes pour les futures versions de Java. Par exemple :

jar root
  - A.class
  - B.class
  - C.class
  - D.class
  - META-INF
     - versions
        - 9
           - A.class
           - B.class
        - 10
           - A.class

Ici Java 9 chargera sa classe A spécifique, mais Java 10 (quand il sera sorti... :-) chargera sa version de la classe A, délaissant celle de Java 9.

JShell : un shell Java !

Java 9 vient enfin avec quelque chose qui lui manquait cruellement alors que de très nombreux autres langages en disposent, de Lisp il y a plus de soixante ans à Python : un interpréteur interactif. Celui-ci s'appelle REPL jShell. REPL pour Read, Evaluation, Print Loop. Read pour saisie de code, Evaluation pour son exécution, Print pour la sortie des résultats et on recommence (Loop). Rien de mieux qu'un interpréteur interactif pour tester rapidement quelques lignes de code.

Il est impossible d'énumérer ici toutes les nouveautés de Java 9. Le mieux est encore de le télécharger et de commencer à travailler avec lui pour le découvrir.

Disponible pour Windows, Mac, Linux et Solaris SPARC Java 9 peut être téléchargé ici.