Java 14

Quelles sont les nouveautés de Java 14 ?
Si vous êtes développeur, vous savez très bien que depuis Java 9, les lancements des nouvelles versions s’enchaînent à une vitesse incroyable, pratiquement tous les 6 mois. Java 14 (Java SE 14) et le Java Development Kit 14 (JDK 14) ont été lancés le 17 mars dernier. Cette version apporte quelques nouveautés intéressantes par rapport au langage, ainsi que des mises à jour de l’API et des améliorations du JVM. Dans cet article, nous ferons un récapitulatif des principales nouveautés de cette dernière version de Java.

Un point sur les fameux nuls pointer
Avec le programme Java 14, vous aurez un outil pour vous aider quand il s’agit de chercher les « nuls pointer exceptions ». Il s’agit du « Helpful null pointer exceptions ». Dans les anciennes versions, quand une exception de ce type était lancée, vous aviez uniquement un message en console vous annonçant une exception dans la classe qui l’avait provoquée. Avec Java 14, vous aurez un message plus riche avec la ligne exacte à l’origine de l’exception. Vous pourrez corriger très rapidement l’erreur. Pour activer ce mode, vous devrez ajouter cette option à la VM :
XX:+ShowCodeDetailsInExceptionMessages
Un point important à ne pas négliger : si vous travaillez avec des applications dans un cadre de haute sécurité, ce type de message peut révéler le nom des variables, ce qui peut entraîner un risque de sécurité.
L’utilisation des records sur Java 14
Java 14 standardise un nouvel objet introduit, comme Preview en Java 12 et Second Preview en Java 13 : le record. Il s’agit d’une classe d’agrégats de données simples. Par exemple :
public record Personne14(String prenom, String nom, Integer âge){}
La différence est que ce type de classe ne nécessite pas de créer les getters, setters, etc. Pour accéder à un champ, on utilise le nom de celui-ci :
Personne14 p = new Personne14(“Pierre”, “Dupont”,”40″);

p.prenom();
À ne pas négliger : si vous travaillez avec des applications dans un cadre de haute sécurité, ce type de message peut révéler le nom des variables, ce qui peut entraîner un risque de sécurité.
Les Enchanced Switch Expressions
La structure « switch » peut être maintenant directement utilisée dans la définition d’une variable à l’aide de la fonction lambda (->) et le mot clé « yield ». Avant Java 14, nous aurions fait quelque chose comme ça :


public void determineBestTeam() {

String country = “Spain” ;

String bestTeam = “” ;

switch (country) {

case “Spain” :

bestTeam = “Barcelona”;

break ;

case “France” :

bestTeam = “PSG”;

break ;

case “Italy” :

bestTeam = “Juventus”;

break ;

}

System.out.println(bestTeam) ;

}

Avec Java 14, nous pourrons maintenant faire comme ça :


public void determineBestTeam() {

String country = “Spain” ;

String bestTeam = switch (country) {

case “Spain” -> “Barcelona”;

case “France” -> “PSG” ;

case “Italy” -> {

// actions

yield “Juventus”;

}

default -> throw new IllegalStateException(“Unexpected value : ” + country) ;

} ;

System.out.println(bestTeam) ;

}

}

La conversion directe des objets
Avec Java 14, vous pourrez convertir un objet de la classe Object directement lors d’une vérification de type. Avant :

public void foo() {

Object obj = “String object”;

if (obj instanceof String) {

String str = (String) obj;

System.out.println(str.toLowerCase()) ;

}

}

Après :


public void foo(){

Object obj = “String object”;

if(obj instanceof String str){

System.out.println(str.toLowerCase()) ;

}

}

Les packages simplifiés
Souvent, les deux aspects les plus compliqués à traiter dans un environnement Java sont l’installation et la production des packages JAR. En plus de ces packages, il faut ajouter un kit d’installation adapté au système local où l’application Java sera installée.

Maintenant, avec Java 14, vous pourrez utiliser l’outil « jpackage » avec lequel vous pourrez produire un package spécifique à la plateforme avec toutes les dépendances, comme si vous réunissiez tous les fichiers Jar dans un même endroit. Les formats dépendent du système local : deb et rpm (Linux), pkg et dmg (macOS), msi et exe (Windows).

Le traitement simplifié de blocs de texte
Il s’agit d’une nouveauté déjà apparue dans Java 13 en tant que « first preview ». Vous pouvez traiter plusieurs lignes de strings sans vous préoccuper de la concaténation, notamment quand vous travaillez avec du code SQL ou HTML. Pour ce faire, rien de plus simple : vous pouvez mettre le bloc de texte entre des triples guillemets :

String requete = """

SELECT c \

FROM Countries c \

WHERE c.geoId = 37 “”” ;

Et encore d’autres nouveautés
D’autres changements mineurs sont également annoncés :

amélioration de certains garbage collectors spécifiques à l’architecture NUMA ;
API permettant aux applications Java d’accéder de manière sûre et efficiente à la mémoire externe ;
le garbage collector CMS est éliminé ;
les outils pour comprimer les JAR utilisant l’algorithme Pack200 sont également supprimés.

En conclusion, les changements apportés par la dernière version de Java vont dans la bonne direction et certains d’entre eux tels que Helpful Null Pointer Exceptions devraient aider énormément les développeurs pendant l’étape de test. Néanmoins, n’oubliez pas que la plupart de ces nouveautés sont en « preview » et qu’elles ne devraient pas être utilisées dans un environnement de production.