Article rédigé par notre collaborateur Hugo Roche.
Ayant pendant longtemps opté pour un cycle de release de plusieurs années entre chaque version jusqu’à sa version 9, Java a depuis multiplié les nouvelles versions tous les 6 mois. La 17, sortie en septembre 2021 est la toute dernière « LTS » (support long terme en bon français) du langage, depuis la version 11 de septembre 2018. Cet article a pour but de présenter les nouveautés principales désormais proposées par le langage.
Classes et interfaces scellées
Nous sommes tous familier avec l’héritage, pilier fondateur de la logique de programmation orientée objet. Avec les classes scellées, il est désormais possible de définir avec précision le périmètre d’une classe, en définissant quelles classes seront autorisées à en hériter. Cela fonctionne aussi avec les interfaces et leurs implémentations. La mise en place de cette nouveauté passe par l’ajout de 2 mots clés : sealed et permits. Voyons tout cela au moyen d’un exemple :
J’ai défini ici une interface scellée nommée Service (notez la présence du mot-clef sealed). Seules les classes Voiture et Camion pourront implémenter cette interface, grâce au mot-clef permits.
Blocs de texte
Il est enfin possible de créer des blocs de texte de façon simple ! Cette nouvelle syntaxe s’avère très utile pour écrire du xml ou du json, par exemple.
À noter aussi que les espaces sont gardés et donc l’indentation du bloc de texte sera respectée.
Type Record
Un record permet de facilement créer des objets immutables. Voilà un exemple avec une classe Personne, qui contient des données liées à une personne (nom, âge…).
Voilà la syntaxe utilisée dans la plupart des cas avant Java 17 pour définir cette classe :
Et voilà la nouvelle syntaxe Java 17 :
Comme on peut le voir, les attributs du record sont définis de manière beaucoup plus lisible et nécessitent moins de code fastidieux. Il y a cependant deux contraintes notables avec ce nouveau type, la classe est finale et ne peut pas hériter d’autres classes.
Pattern matching
Cette fonctionnalité concerne le mot-clé instanceof, qui permet de vérifier le type d’un objet.
Il n’est désormais plus nécessaire de créer un objet en faisant un cast. Avec la nouvelle syntaxe, l’objet est créé au moment de l’appel à instanceof et il est possible de faire directement appel à ses propriétés par la suite, sans avoir à passer par un objet temporaire.
Nouveau switch
La nouvelle syntaxe des switch permet une réduction drastique du nombre de lignes de code :
Comme vous pouvez le voir grâce à l’exemple précédent, il est désormais possible de retourner une valeur grâce à un switch.
Mais ça ne s’arrête pas là, le nouveau switch permet d’inclure la nouvelle syntaxe de pattern matching présentée dans le paragraphe précédent et de créer des conditions dans les clauses :
Conclusion
Cet article ne présente que certains des ajouts et se concentre sur les aspects programmatique de cette nouvelle version du langage. De nombreuses améliorations de performance sont aussi à noter, liées notamment à la prise en charge de macOS et des processeurs M1 d’Apple.