Java 7 : les nouveautés

Il est plus que temps de faire un petit retour sur la dernière soirée du Toulouse JUG. Plus de 80 personnes présentes pour écouter Terrence Barr, de chez Oracle, speaker international de son état. C’est plutôt chouette qu’on ait pu sauter sur l’occasion. Les 80 Toulousains n’ont pas été effrayés par la barrière de la langue, et c’est tant mieux.

Déjà, quelques observations: Terrence a du background et un CV long comme le bras, nous ne pouvons que remercier Oracle de nous l’avoir envoyé. Il faut savoir que Java 7 est sorti cet été dans un espèce d’anonymat général, et il parait clair qu’Oracle veut renouer les liens avec les communautés Java pour redynamiser tout ça. Terrence est donc arrivé avec un discours clair (et de chouettes T-Shirt :p) sur la politique d’Oracle. En quelques mots, il a présenté Java 7 comme une première version de Java sous la houlette d’Oracle, et le but premier est surtout de relancer le mouvement, même si le contexte général de Java 7 n’est pas aussi complet que la communauté l’aurait voulu.  Le but, c’est que Java 8 ne sorte pas dans 4 ans! C’est d’ailleurs prévu pour l’an prochain…

Bon, mais rentrons dans le vif du sujet: Quoi de neuf dans Java 7 ?

I) Philosophie générale

Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible.
La plupart de ces améliorations se trouvent dans un projet plus global : le Project Coin

II) Project Coin

Cela regroupe un ensemble de petites modifications du langage que j’ai trouvé plutôt chouettes.
1) Underscore dans les nombres pour améliorer la lisibilité:

int nombreLisible = 1_000_000_000_000;

2) Switch case basé sur les String… Youpi joie !

switch(OS) {
  case "Windows":
    return "Bouh !";
  case "Linux":
   return "Yeah !";
  ...

3) Un truc trop cool, les Diamond Operators ! C’est la simplification de la déclaration des génériques. Par exemple

Map<String, Map<String, Object>> mapKeyValue = new HashMap<String, Map<String, Object>>

va s’écrire:

Map<String, Map<String, Object>> mapKeyValue = new HashMap<>();

4) Ah, la gestion plus simple dans la manipulation des fichiers en Java ! Ils ont fait en sorte qu’on ne soit pas obligé de mettre des catch dans finally pour fermer les différents flux en créant des « autocloseable »

try (BufferedReader br = new BufferedReader(new FileReader(path)))
{
    return br.readLine();
}

Plus de détails ici : http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

5) Un autre truc que j’ai trouvé chouette, ce sont les multi catch…

try {
  // ma méthode
}
catch (ExceptionOne | ExceptionTwo e)
{
  log(e);
}

Enfin l’arret de dizaines de lignes de code souvent inutiles et redondantes…

III) New I/O 2

Bon, et donc, d’un point de vue des librairies ça donne quoi… On a enfin une évolution tangible sur la gestion des fichiers avec l’API New I/O 2 ou dite NIO2. ça donne :

  • Path sera l’équivalent de la classe File dans l’ancienne API mais permettra en plus de manipuler plus facilement des chemins, trouver facilement un sous dossier, ce genre de choses…
  • Il y aura enfin des fonctions simples de copie / move de fichier…
import static java.nio.file.StandardCopyOption.*;
...
Files.copy(source, target, REPLACE_EXISTING);

IV) Fork / Join

Terrence Barr nous a rappelés que la problématique des accès concurrents et du multi thread était plus que jamais d’actualité, la loi de Morre atteignant sa limite… Et voilà l’avènement du Fork / Join Java, dont le principe est simple : nous ne nous soucions de rien, la JVM s’occupe de tout pour optimiser le process. Les classes clés :

  • ForkJoinPool qui va gérer une pool de tâches
  • ForkJoinTask la dite tâche lancée. Des classes héritières vont proposer différentes résolutions, retournant un résultat, ou non… (RecursvieAction, RecursiveTask)

Attention tout de même, Fork / Join ne permet pas aux tâches de travailler sur des données communes, les traitements doivent être effectués en parallèle.

V) Divers

  • Améliroation du look and feel Nimbus… ça reste du swing, autant dire que je ne trouve pas ça très beau.
  • Des APIs pour gérer la transparence
  • JLayer qui permet de faire comme des popup web (griser l’interface autour d’un JPanel ouvert…)
  • Améliorations de la sécurité avec TLS 1.2
  • JAXP / JAXB qui évoluent
  • du CSS dans la javadoc !! (wouhou !! 🙂 )
  • Et la liste complète : http://openjdk.java.net/projects/jdk7/features/

VI) DaVinci Machine

Java propose à différents langages de programmation d’utiliser les outils de sa JVM pour s’exécuter. Cela leur permet d’utiliser la gestion de la mémoire, des accès concurrents, ou les librairies standards, de façon aisée.

http://download.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language-support.html

Java7 va introduire l’usage de InvokeDynamic en plus des classes existants déjà. Ils ont mesuré des améliorations de performance pour l’exécution des différents langages allant jusqu’à x 10. Je ne rentrerai pas dans les détails, j’avoue que j’ai un peu décroché. Je retiendrai la notion intéressante…

 

VII) Conclusion

Bonne soirée, super intéressante… Une de mes préférés du JUG d’ailleurs. Il était intéressant de ressentir  l’Oracle Touch dans la présentation: une philosophie, un discours bien cadré, et une liberté de parole un peu restreinte (Pas de retour sur le conflit avec Google par exemple…). Mais au moins, Oracle fait l’effort de présenter sa version de Java et la philosophie qu’ils ont voulu mettre dedans.

Terrence a fini par une présentation de Java 8, mais j’y reviendrai prochainement dans un autre article ! Encore merci à lui en tout cas.

LB.

6 réponses sur “Java 7 : les nouveautés”

  1. Merci pour cet excellent résumé, et le tout sans prise de notes , chapeau 😀

    PS: Qu quotidien le multi-catch et le diamond operator sont vraiment trop cool à utiliser.
    J’ai pas encore fait de IO en Java7 mais ça doit bien soulager aussi…

  2. Bonsoir,

    Merci pour le rappel des nouvelles fonctionnalités de Java 7. En effet, j’étais encore resté à Java 6 et je me suis enfin décidé à faire un peu de veille technologique donc merci pour les informations.

    Maintenant, il va falloir que j’essaie tout ça car ça a l’air très intéressant et je suis d’accord pour dire que cela améliore la visibilité du code qui est très importante.

    Bonne soirée,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *