Dilbert ou le monde de l'entreprise vu par les informaticiens : http://dilbert.com/

Quoi de neuf dans Java 9 ?

Quoi de neuf dans Java 9 ?

On approche de plus en plus de Java 9, bien que sa sortie ait été une fois encore repoussée à Septembre 2017, cette fois-ci à cause de désaccords concernant le système modulaire Jigsaw.

Si les lambdas constituaient le mat de cocagne de Java 8, l’intégration du système de modules Jigsaw est celui de Java 9. La JEP 261 (Java Enhancement Proposal) détaille les particularités de ce nouveau système de modules au sein du JDK.

La liste complète des JEP pour Java 9 est publiée sur http://openjdk.java.net/projects/jdk9/

1. Le système de modules Jigsaw

Projet en gestation dans les locaux de Sun depuis 2008, ce projet, dont l’intégration était prévue pour Java 8, verra finalement le jour dans Java 9.

Jigsaw permet la modularisation de l’application : c’est à dire que des « barrières » vont être définies entre chaque partie d’un projet pour permettre l’indépendance de chaque module, chacun de ses modules pouvant « s’emboiter » les uns les autres.

OSGI est le système de modularisation le plus répandu aujourd’hui, et son intégration avec Jigsaw est gérée par des projets annexes tels que Penrose par exemple.

Le projet donne naissance à de nouvelles directives comme requires, provides, exports, permits, etc., et du module-info.java permettant de définir un module et d’en délimiter le périmètre.

module A @1.0
{

   // Déclaration d'une dépendance (différentes versions, bornes inclusives / exclusives, caractère joker ...).
   requires B @ [1.0,2.0);

   // Imposer un chargement via le même classloader pour éviter les anciens problèmes de classpath.
   requires local B @ [1.0, 2.0);
   
   // Seuls les types " Public " seront exportés donc visibles pour les autres modules : export d'API.
   exports org.x.y.*;
   
   // Contrôle des modules pouvant utiliser A, sinon permis pour tous modules.
   permits C;
   
   // Un module peut indiquer un autre nom comme un alias.
   provides alias_module_A
   
...
}

Source : http://soat.developpez.com/tutoriels/java/futures-fonctionnalites-modulaires-java9/

2. Mise à jour de l’API d’accès aux processus du système d’exploitation

La nouvelle classe ProcessHandle fournit nativement des informations concernant les processus en cours d’exécution du système d’exploitation, comme le PID, les arguments, la commande de lancement, le temps CPU etc… Cette classe peut également monitorer le cycle de vie des processus. Des actions peuvent être menées lorsqu’un processus se termine grace aux Future sur ProcessHandle.onExit.

3. Des fonctionnalités de bureau spécifiques à l’OS

La classe Desktop a été aggrémentée de quelques fonctionnalités permettant l’écoute de la zone de notifications de la plate-forme hôte, la customisation des fenêtres « A propos » et « Préférences », l’écoute d’événements tels que l’affichage d’une boite de dialogue de sélection de fichiers ou d’une fenêtre d’impression de fichiers etc…

L’intégralité des fonctionnalités sont décrites dans la JEP-272.

4. Des images multi-résolutions

Le package java.awt.images a été enrichie d’une classe permettant l’encapsulation d’une même image dans différentes résolutions : MultiResolutionImage

Cette classe pourrait être utile lorsque les plate-formes cibles sont susceptibles d’avoir des résolutions différentes (tablettes, mobiles, desktop etc…). La JEP-251 détaille la proposition d’amélioration.

5. Arrivée du JShell

La plate-forme Java fournit désormais un REPL (Read-Eval-Print-Loop). Il s’agit d’un interpréteur de commandes permettant d’évaluer des déclarations, instructions et expressions du langage Java.

C’est selon moi utile avant tout dans un but éducatif.

6. Déprécation des Applets

Les composantes Java nécessitant des plugins du navigateur (Applet, JApplet, JavaFX) devraient être redéployées dès aujourd’hui en Java Web Start.

L’objectif étant d’arriver à un internet plugin-free, cette évolution s’inscrit dans cette optique.

7. Des factory methods pour les collections immutables

Voilà qui va faciliter la vie du développeur pour la création de petites collections. Au lieu du très verbeux code suivant pour créer une liste d’objets immutables :

List<String> list = Collections.unmodifiableList(new ArrayList<String>() {
   {
      add("Bonjour");
      add("tout");
      add("le");
      add("monde");
   }
});

Java 9 intègre des méthodes de constructions sur les interfaces de List, Set et Map. On pourra donc écrire :

List<String> list = List.of("Bonjour", "tout", "le", "monde");

Conclusion

Au-delà des 7 nouveautés présentées ci-dessus, il en existe de nombreuses autres que je vous invite à découvrir par vous-même sur le site officiel de Java : https://docs.oracle.com/javase/9/whatsnew/

Des améliorations au niveau de l’installateur, du compilateur, de l’interpréteur Javascript Nashorn etc etc … plein de nouveautés à découvrir 🙂 en espérant que la sortie ne soit désormais plus retardée !!


Retrouvez toutes les nouvelles fonctionnalités sur le site officiel : https://docs.oracle.com/javase/9/whatsnew/

Illustration de l’article et compte à rebours de Java 9 : http://www.java9countdown.xyz/

Laisser un commentaire