Passer au contenu principal
eLearner.app
Module 6 · Leçon 2 sur 212/14 dans le cours~15 min
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>T représente un espace réservé pour un type qui sera spécifié lors de l'instanciation.

Code
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 :

Code
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.

Code
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.

Code
public static <T extends Number> void processNumber(T number) {
    // Accetta Integer, Double, Float, ecc.
    System.out.println(number.doubleValue());
}

À toi de jouer

Exercice#java.m6.l2.e1
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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

Exercice#java.m6.l2.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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

Exercice#java.m6.l2.e3
Tentatives : 0Chargement…

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().

Chargement de l'éditeur…
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