- Introduction :
Cet article montre l'utilité de la généricité dans JAVA. D'abord, un exemple trés simple sans généricité, puis le même exemple avec la généricité.
2. Présentation de l'exemple :
Cet exemple consiste à lire le nom et le prénom d’un employé (Class GetEmploye) à partir d’une classe Appel. L’utilisation de la généricité permet d’indiquer le type utilisé par la classe GetEmploye dans la classe appelante (Class Appel).
3. Programmation sans généricité :
Class GetEmploye :
package sansgenericite;
public class GetEmploye {
Object numero;
Object nom;
public GetEmploye(Object arg1, Object arg2) {
numero = arg1;
nom = arg2;
}
public Object getNumero() {
return numero;
}
public Object getNom() {
return nom;
}
}
Class Appel :
public class Appel {
public Appel() {
}
public static void main(String args[]) {
GetEmploye EMP = new GetEmploye("EMP001","Paul");
Double numeroEmploye = (Double)EMP.getNumero();
String nomEmploye = (String)EMP.getNom();
System.out.println(numeroEmploye);
System.out.println(nomEmploye);
}
}
Lors de la compilation, on n’obtient aucune erreur. Par contre lorsqu’on exécute la classe Appel, on obtient l’erreur :
Exception in thread "main" java.lang.ClassCastException: java.lang.String at sansgenericite.Client.main(Client.java:10)
4. Programmation avec généricité :
Classe GetEmploye :
package avecgenericite;
public class GetEmploye<T> {
T numero;
T nom;
public GetEmploye(T arg1, T arg2) {
numero = arg1;
nom = arg2;
}
public T getNumero() {
return numero;
}
public T getNom() {
return nom;
}
}
Classe Appel :
package avecgenericite;
public class Appel {
public Appel() {
}
public static void main(String args[]) {
GetEmploye<String> EMP = new GetEmploye<String>("EMP001","Paul");
Double numeroEmploye = EMP.getNumero();
String nomEmploye = EMP.getNom();
System.out.println(numeroEmploye);
System.out.println(nomEmploye);
}
}
S’il existe une erreur de type, on l’obtient à la compilation, et on n’attend pas l’exécution pour obtenir l’erreur. Dans cet exemple, on obtient l’erreur suivante à la compilation :
Error(10,30): incompatible types; found: class java.lang.String, required: class java.lang.Double