📝 Ce que vous apprendrez
- Qu'est-ce que les génériques et pourquoi sont-ils utiles ?
- Comment utiliser les classes, méthodes et interfaces génériques ?
- Types délimités et caractères génériques
- Exemples concrets avec les collections
🧠 Que sont les génériques ?
Les génériques vous permettent de paramétrer les types. Au lieu d'écrire différentes classes pour différents types de données, vous pouvez écrire une classe ou une méthode générique.
List<String> names = new ArrayList<>();
✅ Permet de détecter les erreurs au moment de la compilation ✅ Évite le casting explicite ✅ Améliore la réutilisation du code
📦 Exemple de classe générique
class Box<T> {
private T value;
public void set(T value) { this.value = value; }
public T get() { return value; }
}
Utilisez-le comme suit :
Box<String> b1 = new Box<>();
b1.set("Hello");
System.out.println(b1.get());
Box<Integer> b2 = new Box<>();
b2.set(42);
🛠️ Méthodes génériques
public class Utils {
public static <T> void printArray(T[] array) {
for (T item : array) {
System.out.println(item);
}
}
}
🧱 Paramètres de type délimité
Utilisez des limites pour restreindre les types :
class MathBox<T extends Number> {
public double square(T num) {
return num.doubleValue() * num.doubleValue();
}
}
🌀 Jokers - ?
Utilisé lorsque l'on veut de la flexibilité, en particulier avec l'héritage :
List<?> list = new ArrayList<String>(); // accepts any type
Types de caractères génériques :
Syntaxe | Signification |
---|---|
<?> |
N'importe quel type |
< ? extends T> |
Tout sous-type de T |
< ? super T> |
Tout supertype de T |
🔄 Génériques dans les collections
Les collections utilisent largement les génériques :
List<String> list = new ArrayList<>();
list.add("Hello");
// list.add(123); // ❌ Compile error!
💡 Pourquoi utiliser les génériques ?
✅ Sécurité de type au moment de la compilation ✅ Pas besoin de casting ✅ Réutilisabilité ✅ Des API plus propres (en particulier pour les bibliothèques et les frameworks)
📘 Recap
- Les génériques rendent votre code plus sûr et plus propre
- Utiliser
<T>
pour définir des types génériques - Les caractères génériques offrent une certaine souplesse (
<?>
,< ? extends>
,< ? super>
) - Les collections et de nombreuses API Java utilisent les génériques sous le capot