Leçons du module (2/2)
Types Génériques en Java
Les Generics (Types Génériques) ont été introduits en Java pour permettre aux classes, interfaces et méthodes d'opérer sur différents types passés en paramètres, garantissant ainsi le contrôle des types au moment de la compilation (Compile-time Type Safety) et évitant des conversions (casts) explicites et coûteuses lors de l'exécution.
Classes Génériques
Une classe générique est définie en utilisant des crochets pointus <T> où T représente un espace réservé pour un type qui sera spécifié lors de l'instanciation.
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
Lorsque nous créons un objet de type Box, nous spécifions le type réel :
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // Nessun cast necessario!
Méthodes Génériques
Il est possible de définir une seule méthode générique capable d'accepter différents paramètres de type. Le paramètre de type est positionné avant le type de retour de la méthode.
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}
Limitations des Generics (Wildcards)
Nous pouvons limiter les types acceptés par un générique à l'aide du mot-clé extends (limite supérieure) afin d'accepter un type spécifique ou ses sous-classes.
public static <T extends Number> void processNumber(T number) {
// Accetta Integer, Double, Float, ecc.
System.out.println(number.doubleValue());
}
À toi de jouer
Complétez la classe générique Box en définissant le getter getValue() qui renvoie T et le setter setValue(T value) qui définit la variable privée value.
Afficher l'indice
Écrivez les méthodes avec la signature correcte en utilisant le paramètre de type générique `T`.
Solution disponible après 3 tentatives
Créez une méthode générique statique printArray qui prend en entrée un tableau de type T[] nommé array et affiche chaque élément à l'aide d'une boucle for-each.
Afficher l'indice
Le paramètre de type `<T>` doit être placé immédiatement après `static` et avant le type de retour `void`.
Solution disponible après 3 tentatives
Créez une classe statique StringContainer qui implémente l'interface Container paramétrée avec String. Définissez un constructeur qui accepte un paramètre String et implémente la méthode getItem().
Afficher l'indice
Remplacez le type générique `T` par `String` dans la signature de la classe et dans le type de retour de la méthode `getItem()`.
Solution disponible après 3 tentatives