Génériques en Java

Les génériques en Java se réfèrent à la capacité d'utiliser un type comme paramètre dans des méthodes et des classes. Ce mécanisme permet de créer un ensemble de classes ou de méthodes connexes pouvant travailler sur des types variés grâce à une seule déclaration. De plus, l'utilisation de génériques assure la sécurité des types au moment de la compilation, permettant ainsi d'identifier les types invalides avant même l'exécution du code.

Remarque : Les paramètres de type en Java ne peuvent être que des types de référence, ce qui signifie que les types primitifs (comme int, double ou char) ne peuvent pas être utilisés.

Méthodes Génériques

Une déclaration de méthode générique peut être appelée avec des arguments de différents types. Le compilateur traite chaque appel à la méthode en fonction des types des arguments fournis.

Syntaxe
<T> void maMéthode( T argument ) { // Corps de la méthode }

La section des paramètres de type est placée avant le type de retour et est entourée de signes « <> ». On y déclare un ou plusieurs paramètres de type séparés par des virgules (T dans l'exemple ci-dessus), chacun étant un identifiant pour un type spécifique. Ces identifiants peuvent être utilisés pour définir le type de retour, les types des arguments passés à la méthode, et comme spécificateurs de type dans le corps de la méthode.

Exemple
L’exemple suivant illustre comment une méthode générique peut accepter des tableaux de types différents :

public class ExempleMéthodeGénérique {  // Méthode générique  
  public static  void afficherTableau( T[] a ) {    for(T item : a) {      System.out.printf("%s", item);      System.out.println();    }  }
  // Exemple d'utilisation  
  public static void main(String args[]) {    Integer[] tableau1 = {0, 1, 2, 3};    String[] tableau2 = {"Bonjour", "Monde"};    Character[] tableau3 = {'G', 'E', 'N', 'E', 'R', 'I', 'C'};
    afficherTableau(tableau1);    afficherTableau(tableau2);    afficherTableau(tableau3);
  }
}

Ce code produira la sortie suivante :

0123
BonjourMonde
GENERIC

Classes Génériques

Une classe générique reçoit un ou plusieurs paramètres de type lors de sa déclaration. L’une des utilisations les plus courantes d’une classe générique se trouve dans les classes de collection de Java. Par exemple, un ArrayList est une classe générique qui nécessite un paramètre de type pour définir le type qu’elle contient.

Syntaxe

modificateurAccès class NomClasse {  // Corps de la classe }

Les paramètres de type peuvent être utilisés à travers toute la définition de la classe pour déclarer des variables et spécifier les types de paramètres pour les méthodes.

Exemple
Cet exemple définit une classe Seau qui peut contenir des éléments de divers types :

// Seau.java
class Seau {  
  private T item;
  public void mettreDansSeau(T item) {    this.item = item;  }
  public T prendreDuSeau() {    return item;  }
}

Cet exemple montre comment utiliser la classe générique Seau :

// UtilisationSeau.java
public class UtilisationSeau {  
  public static void main(String[] args) {    Seau seau1 = new Seau();    Seau seau2 = new Seau();
    seau1.mettreDansSeau("Bonjour le monde!");    seau2.mettreDansSeau(12345);
    System.out.printf("%s", seau1.prendreDuSeau());    System.out.println();    System.out.printf("%s", seau2.prendreDuSeau());  }
}

Ce code produira la sortie suivante :

Bonjour le monde!
12345