Six mois après la sortie de Java 9, voici déjà arrivé la sortie de Java 10. Nous allons dans cet article faire un tour d’horizon des principales nouveautés destinées aux développeurs qui utilisent cette version.

 

L’inférence de type des variables locales

C’est la grosse nouveauté pour les développeurs en Java 10, l’inférence de type des variables locales. Elle se fait en utilisant l’instruction var et facilitera la déclaration de variables locales.

Java reste un langage statiquement typé, mais quand on déclare une variable puis on l’instancie sur la même ligne, la déclaration de type est redondante !

Le mot clé var va donc pouvoir la remplacer. Cela simplifiera l’affichage surtout pour les types compliqués.

L’instruction suivante :

Map<Integer, List<String>> mapping = … ;

Deviendra alors plus lisible en la déclarant simplement ainsi :

var mapping = … ;

Il y aura donc moins de cérémonie inutile et l’écriture sera plus concise.

L’utilisation est également possible dans les boucles et les try-with-resources. Le type n’est pas visible mais il est toujours généré dans le bytecode.

Il existe tout de même quelques restrictions :

code java

D’autres points d’attention :

  • Le code risque d’être moins lisible surtout sans IDE ;
  • Il faut dorénavant donner une importance accrue au nom des variables pour simplifier la lecture ;
  • L’abstraction est limitée : pas d’inférence vers un super type ou une interface par exemple pour ArrayList<String>() qui sera forcément de type ArrayList alors qu’on aurai eu sans l’inférence de type tendance à l’inféré à un type List.

La mise à jour des API

On notera l’apparition de :

  •  Une nouvelle méthode « orElseThrow() » sur les Optional qui est une alternative à « get() » :

Si l’élément est présent sur l’optional elle le retourne sinon elle throw une exception de type « NoSuchElementException ».

C’est similaire à l’utilisation de la méthode orElseThrow(NoSuchElementException::new) mais sans la cérémonie de l’instanciation de l’exception en plus.

  • Une nouvelle méthode statique « copyOf(Collection) » sur List, Set et Map. Qui permet de créer une copie immuable de la collection passée en paramètre.

Il y aura également :

  • Une amélioration de l’API Stream et l’ajout de Collectors pour création de collections immuables :

                  –   Collectors.toUnmodifiableList(),

                  –   Collectors.toUnmodifiableSet(),

                  –   Collectors.toUnmodifiableMap(keyFunc, valueFunc),

                  –   Collectors.toUnmodifiableMap(keyFunc, valueFunc, mergeFunc).

Conclusion

En conclusion, Java 10 propose quelques nouveautés intéressantes pour les développeurs, néanmoins étant donné la cadence des releases qui est fixée à 6 mois nous sommes loin du gap qui avait été fait entre Java 7 et Java 8. Mais dorénavant les développeurs pourront avoir plus régulièrement des nouveautés utiles ce qui est en somme une bonne chose pour la popularité de ce langage.

Liens utiles

Nouveautés Java 10 par Oracle : http://www.oracle.com/technetwork/java/javase/10-relnote-issues-4108729.html#NewFeature

Conférence Devoxx liée à l’article : https://www.youtube.com/watch?v=dYubeLiObqY