[Nantes JUG] Présentation de Java 7

Jeudi 3 novembre à Nantes avait lieu le JUG sur le thème des nouveautés Java 7. J'ai trouvé cette conférence intéressante et bien ficelée, au cœur de mon métier de développeur. Voici quelques unes des nouveautés présentées.

Animée par Sébastien Prunier, cette conférence s'est déroulée en deux temps : d'abord, une présentation générale des nouveautés abordées, puis une démonstration très intéressante sur la problématique du refactor d'une application existante développée sous Java 6, vers Java 7, pour mettre en œuvre ces nouveautés.
Voici quelques unes des nouveautés abordées.

Underscores dans les littéraux

Nouvelle syntaxe qui permet, par l'ajout de caractères underscore dans un nombre, de distinguer d'un coup d’œil sa valeur.
Avant :

public int nb = 1536058;

Après :

public int nb = 1_536_058;

Prise en compte des String dans la structure switch

Les chaînes de caractères sont maintenant prises en compte dans les case de la structure switch.
Avant :

String s = ...;
if ("val1".equals(s)) {
	do1();
} else if ("val2".equals(s)) {
	do2();
} else {
	doDefault();
}

Après :

String s = ...;
switch (s) {
	case "val1" : do1(); break;
	case "val2" : do2(); break;
	default : doDefault();
}

Le "multiple-catch"

Super utile, ce raccourci syntaxique permet de grouper des blocs catch, dans la structure try-catch, pour lesquels le traitement est identique. Attention toutefois : il n'est pas possible de combiner n'importes quelles exceptions (des exceptions parentes ne peuvent pas être regroupées).
Avant :

try {
	myMethodThrowingExceptions();
catch(MyException1 e) {
	handleException();
} catch(MyException2 e) {
	handleException();
} catch(MyException3 e) {
	handleException();
}

Après :

try {
	myMethodThrowingExceptions();
catch(MyException1 | MyException2 e) {
	handleException();
} catch(MyException3 e) {
	LOG.error(e);
}

Opérateur Diamond pour l'inférence de types génériques

Raccourci syntaxique pour l'instanciation d'une classe générique, quand la référence à l'instance explicite déjà le type réel de l'instance.
Avant :

List<String> strings = new ArrayList<String>();
Map<Integer, StringBuilder> map = new TreeMap<Integer,StringBuilder>();

Après :

List<String> strings = new ArrayList<>();
Map<Integer, StringBuilder> map = new TreeMap<>();

try-with-resource

Là encore, une nouveauté très pratique qui permet d'épurer le code et de le rendre plus sûr, en rendant implicite le bloc finally dans la structure try-catch liée au traitement d'une ressource qui doit être fermée après le traitement.
Avant :

FileReader reader = null;
try {
	reader = new FileReader("file");
	doSomeThings(reader);
} catch (IOExeption e) {
	handle(e);
} finally {
	if (reader!=null) {
		reader.close();
	}
}

Après :

try(FileReader reader = new FileReader("file")) {
	doSomeThings(reader);
} catch (IOExeption e) {
	handle(e);
}

Fini, donc, le bloc finally et l'appel à la méthode close() pour toute ressource implémentant la nouvelle interface java.lang.AutoCloseable.

Nouvelle API pour la gestion des Inputs/Outputs

Une nouvelle API de gestion des IO va être intégrée : NIO 2. Elle va notamment simplifier la gestion du système de fichiers, et ce n'est pas de trop compte-tenu de la lourdeur de l'API actuelle. Nous y retrouvons également un système de notification de mise à jour de fichiers, java.nio.file.WatchService (comme le System.IO.FileSystemWatcher de dotNET.)

Conclusion

Cette nouvelle version de Java, qui s'est faite attendre puisque la dernière datait de 2006, va nous simplifier la vie à nous, développeurs. Vivement que nous la mettions en pratique!

Quelques liens

Voici quelques liens pour aller plus loin dans la découverte de cette nouvelle version de Java.

Un commentaire

  1. Post succint et clair! Merci beaucoup pour cette jolie présentation! J’ai bien aimé le « Raccourci syntaxique pour l’instanciation d’un générique », on va enfin pouvoir respecter les 100 caractères / ligne de nos règles Checkstyle! 🙂

Laisser un commentaire

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

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.