Java 17, une version de support à long terme (LTS), apporte plusieurs nouvelles fonctionnalités et améliorations à la plateforme Java. Ce tutoriel couvrira certaines des principales fonctionnalités introduites dans Java 17, avec des exemples pour illustrer leur utilisation.
Table des Matières
- Classes Scellées
- Correspondance de Modèles pour Switch (Aperçu)
- Générateurs de Nombres Aléatoires Améliorés
- Nouveau Pipeline de Rendu macOS
- Filtres de Désérialisation Spécifiques au Contexte
- Dépréciation de l’API Applet pour Suppression
- Autres Améliorations
1. Classes Scellées
Les classes et interfaces scellées restreignent quelles autres classes ou interfaces peuvent les étendre ou les implémenter. Cela offre plus de contrôle sur la hiérarchie d’héritage.
Example
// Define a sealed class
public sealed class Shape permits Circle, Rectangle { }
// Define permitted subclasses
public final class Circle extends Shape {
double radius;
}
public final class Rectangle extends Shape {
double length, width;
}
2. Correspondance de Modèles pour Switch (Aperçu)
La correspondance de modèles pour les expressions et instructions switch permet un code plus concis et lisible.
Example
public class PatternMatchingSwitch {
public static void main(String[] args) {
Object obj = "Hello, Java 17";
// Use pattern matching in switch statement
switch (obj) {
case String s -> System.out.println("It's a string: " + s);
case Integer i -> System.out.println("It's an integer: " + i);
default -> System.out.println("Unknown type");
}
}
}
3. Générateurs de Nombres Aléatoires Améliorés
Java 17 introduit de nouvelles interfaces et implémentations pour les générateurs de nombres pseudo-aléatoires (PRNG).
Example
import java.util.random.RandomGenerator;
import java.util.random.RandomGeneratorFactory;
public class RandomExample {
public static void main(String[] args) {
RandomGenerator rng = RandomGeneratorFactory.of("Xoshiro256PlusPlus").create();
// Generate random numbers
System.out.println("Random int: " + rng.nextInt());
System.out.println("Random double: " + rng.nextDouble());
}
}
4. Nouveau Pipeline de Rendu macOS
Java 17 introduit un nouveau pipeline de rendu pour macOS basé sur l’API Apple Metal, améliorant les performances et la stabilité.
5. Filtres de Désérialisation Spécifiques au Contexte
Cette fonctionnalité permet de définir des filtres de désérialisation pour des contextes spécifiques, améliorant la sécurité lors de la désérialisation des objets.
Example
import java.io.*;
import java.util.*;
public class DeserializationFilterExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// Set a filter
ObjectInputFilter filter = ObjectInputFilter.Config.createFilter("com.example.*;!*");
// Apply filter during deserialization
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.data"))) {
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
System.out.println("Deserialized object: " + obj);
}
}
}
6. Dépréciation de l’API Applet pour Suppression
Java 17 déprécie l’API Applet, la préparant pour une future suppression en raison du déclin du support des applets Java par les navigateurs.
7. Autres Améliorations
Java 17 inclut également diverses autres améliorations, telles que :
- Encapsulation stricte des internels du JDK par défaut.
- Nouvelles méthodes dans les classes existantes (par exemple, java.nio.file.Files.mismatch).
- Dépréciation du package java.security.acl pour suppression.
Example of Files.mismatch Method
import java.nio.file.*;
public class FilesMismatchExample {
public static void main(String[] args) throws IOException {
Path file1 = Path.of("file1.txt");
Path file2 = Path.of("file2.txt");
// Compare files and get the position of the first mismatch
long mismatch = Files.mismatch(file1, file2);
if (mismatch == -1) {
System.out.println("Files are identical");
} else {
System.out.println("Files mismatch at byte position: " + mismatch);
}
}
}
Conclusion
Java 17 apporte plusieurs améliorations et fonctionnalités significatives qui améliorent l’expressivité, les performances et la sécurité du langage. Ce tutoriel a couvert certaines des nouvelles fonctionnalités les plus notables avec des exemples pour vous aider à démarrer. Pour une liste complète de tous les changements et améliorations, consultez les notes de version officielles de Java 17.