Je n’ai ici gardé que les plus importants changements à utiliser.
Depuis JDK 8
Lambdas et interfaces fonctionnelles
Les lambdas qui sont des fonctions anonymes stoquées dans des variables. Et les interfaces fonctionnelles sont des interfaces n’ayant qu’une seule méthode pour une lambda.
Grâce à cela, on peut avoir des types de fonctions plus précis et rendre le code plus sûr.
Voici un exemple d’interface fonctionnelle :
Default methods in interfaces
Maintenant on peut écrire un code par défault dans les interfaces (rendant donc l’implémentation de ces méthodes par défault optionnelle).
Date and time API
Avant Java 8 il n’y avais pas d’API par défault pour gérer le temps et les dates. Maintenant il y en a une. Vous pouvez avoir tous les détails dans la Javadoc de java.time.
A partir de Java 8 on peut simplement récupérer la date et l’heure actuelle en faisant LocalDateTime.now().
Stream API
Pour expliquer plus en détails les avantages de la stream API, voici quelques exemples de code avec et sans stream.
Les streams API sont assez important et sont attendu à l’AI.
Imaginons que l’on a une liste de valeurs en nombre et en String et que l’on veut faire la moyenne tout en passant le premier élément :
Sans la stream API :
Avec la stream API :
Depuis JDK 9
Listes immuables
On peut maintenant créer des listes (ou d’autres collections) immuables en Java avec of ou copyOf :
Depuis JDK 10-11
Inférence de type
Depuis Java 10 ou 11 on peut maintenant utiliser l’infférence de type, on est donc plus obligé de préciser le type d’une variable locale. On peut simplement utiliser le mot clé var
JDK 17
Sealed classes
Les sealed classes permettent de limiter les classes qui peuvent hériter de la classe actuelle. Il n’est pas recommandé d’utiliser ceci pour la même raison qu’il n’est pas recommandé d’utiliser l’héritage.
Switch expressions
Les switch peuvent maintenant fonctionner avec n’importe quel type (et pas uniquement int comme avant), de plus on peut en écrire plusieurs sur la même ligne :
Records
Les records permettent de créer très simplement des data class pour représenter certains concepts et les stoquer.
Voici comment représenter une Personne avec un nom et un age avant les Records :
Et voici comment représenter à peu près la même chose avec un Record
Text blocks
Depuis JDK 17 on peut aussi simplement faire des Strings de plusieurs lignes avec """.
Voici comment faire un String de 3 lignes avant JDK 17 :
Et voici comment faire la même chose depuis JDK 17 :