Leçon 40 : Sécurité des types avec les Generics (<T>)
Les Generics ont été introduits dans Java 5 pour assurer la sécurité des types au moment de la compilation. Ils permettent à une classe ou une méthode d'opérer sur des objets de différents types tout en conservant les capacités de vérification de type.
1. Le problème résolu par les Generics
Avant les generics, les collections stockaient les objets sous le type de base Object. Cela signifiait que le compilateur ne pouvait pas vérifier le type stocké, ce qui entraînait des erreurs potentielles de type ClassCastException lors de l'exécution.
java // Avant les Generics (Mauvais) : List names = new ArrayList(); names.add("Alice"); names.add(10); // Le compilateur autorise cela, mais cela causera un plantage plus tard
String name = (String) names.get(0); // String number = (String) names.get(1); // ERREUR À L'EXÉCUTION : ClassCastException
2. Utilisation des Generics
Nous spécifions le type à l'intérieur de chevrons (<Type>) lors de la déclaration de la collection. Le paramètre de type est souvent représenté par T (Type), E (Element) ou K/V (Key/Value).
java
// Avec les Generics (Bon) :
List
String name = names.get(0); // Aucun transtypage requis
3. Création d'une classe générique
Vous pouvez rendre vos propres classes génériques en ajoutant un paramètre de type à la déclaration de la classe.
java
public class Box
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
// Utilisation :
Box
Concept clé (Erasure) : Les generics de Java sont implémentés par effacement de type. À l'exécution, les paramètres de type sont supprimés et le compilateur les remplace par Object ou leur borne supérieure. Cela garantit la compatibilité ascendante.