Opérateur diamant Java : simplifier les génériques depuis Java 7
Opérateur diamant Java
L'opérateur diamant a été introduit dans Java 7 pour rendre le code plus lisible pour les génériques. Un générique est un type d'argument. En utilisant les génériques, nous pouvons passer tout type d'objet à traiter par les méthodes de la classe. Par exemple, si nous créons une liste de chaînes avant Java 7, nous devions utiliser la syntaxe suivante pour instancier une liste de chaînes avec un objet ArrayList.
List<String> listOfStrings = new ArrayList<String>();
Depuis Java 7, nous pouvons utiliser l'opérateur diamant pour simplifier la syntaxe ci-dessus comme suit :
List<String> listOfStrings = new ArrayList<>();
Mais il ne pouvait pas être utilisé avec les classes internes anonymes. Par exemple, nous ne pouvions pas omettre le type d'objet de l'opérateur diamant dans la syntaxe ci-dessous avant Java 9.
Handler<Integer> intHandler = new Handler<Integer>(1) { @Override public void handle() { System.out.println(content); } };
Opérateur diamant dans une classe anonyme
Dans Java 9, l'opérateur diamant peut être utilisé avec une classe anonyme également pour simplifier le code et améliorer la lisibilité.
Handler<Integer> intHandler = new Handler<>(1) { @Override public void handle() { System.out.println(content); } };
Opérateur diamant dans Java 7, Java 8
Dans l'exemple ci-dessous, nous avons créé des classes anonymes pour une classe abstraite Handler acceptant un argument générique et nous passons le type d'objet lors de la création de la classe anonyme car nous devons passer l'argument de type sinon le programme ne compilera pas.
Exemple
public class Tester { public static void main(String[] args) { // créer une classe anonyme pour gérer 1 // Ici nous devons passer les arguments de type dans l'opérateur diamant // avant Java 9 sinon le compilateur signalera une erreur Handler<Integer> intHandler = new Handler<Integer>(1) { @Override public void handle() { System.out.println(content); } }; intHandler.handle(); // créer une classe anonyme pour gérer 2 Handler<? extends Number> intHandler1 = new Handler<Number>(2) { @Override public void handle() { System.out.println(content); } }; intHandler1.handle(); Handler<?> handler = new Handler<Object>("test") { @Override public void handle() { System.out.println(content); } }; handler.handle(); } } abstract class Handler<T> { public T content; public Handler(T content) { this.content = content; } abstract void handle(); }
Sortie
Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant :
1 2 Test
Opérateur diamant Java 9 et versions ultérieures
Avec Java 9, nous pouvons utiliser l'opérateur <> avec une classe anonyme comme indiqué ci-dessous.
Exemple
Dans l'exemple ci-dessous, nous avons créé des classes anonymes pour une classe abstraite Handler acceptant un argument générique mais sans le type d'objet lors de la création de la classe anonyme car nous n'avons pas besoin de passer l'argument de type. Le compilateur infère le type automatiquement.
public class Tester { public static void main(String[] args) { // créer une classe anonyme pour gérer 1 // Ici nous n'avons pas besoin de passer les arguments de type dans l'opérateur diamant // car le compilateur Java 9 peut inférer le type automatiquement Handler<Integer> intHandler = new Handler<>(1) { @Override public void handle() { System.out.println(content); } }; intHandler.handle(); Handler<? extends Number> intHandler1 = new Handler<>(2) { @Override public void handle() { System.out.println(content); } }; intHandler1.handle(); Handler<?> handler = new Handler<>("test") { @Override public void handle() { System.out.println(content); } }; handler.handle(); } } abstract class Handler<T> { public T content; public Handler(T content) { this.content = content; } abstract void handle(); }
Sortie
Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant :
1 2 Test
Java
- Maîtriser l'instruction switch en Java : Syntaxe, utilisation et bonnes pratiques
- Framework Collections Java : interfaces de base, implémentations et usage pratique
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- TOP 50 questions d'entretien WebLogic et réponses (2026)
- Variables et littéraux en Java : Guide complet
- Prise de Décision en Java : Maîtriser les Instructions Conditionnelles pour une Programmation Robuste
- Modificateurs Java Expliqués : Types, Utilisation et Bonnes Pratiques
- Maîtriser les représentations en chaînes dans les enums Java
- Maîtriser Java FileReader : Guide complet et exemples pratiques