Middle
Qu'est-ce que les Génériques et à quoi servent-ils?
sobes.tech IA
Réponse de l'IA
Les génériques en Java permettent de créer des classes, interfaces et méthodes qui fonctionnent avec des types paramétrés.
L'objectif principal des génériques :
- Amélioration de la sécurité de type : Le compilateur vérifie les types lors de la compilation, évitant ainsi
ClassCastExceptionà l'exécution. - Suppression des conversions de type : Il n'est pas nécessaire de convertir manuellement les types lors de l'extraction d'éléments des collections.
- Création de code plus flexible et réutilisable : On peut écrire des algorithmes et structures de données génériques applicables à différents types de données.
Exemple sans génériques :
// Avant Java 5
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // sans typage
list.add("bonjour");
list.add(123); // peut ajouter n'importe quel objet
String s = (String) list.get(0); // nécessite une conversion de type
Integer i = (Integer) list.get(1); // nécessite une conversion de type
// Peut entraîner une erreur de conversion
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Exemple avec génériques :
// Avec génériques
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // liste de chaînes
list.add("bonjour");
// list.add(123); // erreur de compilation - ne peut pas ajouter Integer
String s = list.get(0); // pas besoin de conversion de type
// Impossible d'ajouter un autre type, évite les erreurs
// List<Integer> intList = new ArrayList<>();
// intList.add("monde"); // erreur de compilation
System.out.println(s);
}
}
Les génériques sont également utilisés dans :
- Classes :
ArrayList<E>,HashMap<K, V> - Interfaces :
List<E>,Map<K, V> - Méthodes :
<T> void printArray(T[] array) - Restrictions de types :
<T extends Comparable<T>>(restriction aux types qui implémententComparable)
L'implémentation des génériques en Java est basée sur "l'effacement de types" (type erasure) lors de la compilation. Cela signifie que l'information sur les types génériques est supprimée, et à l'exécution, la JVM opère avec des types bruts. Cela garantit la compatibilité avec les anciennes versions de Java, mais présente certaines limitations.