Académique Documents
Professionnel Documents
Culture Documents
Objectifs
Comprendre la notion de Généricité en Java
Comprendre et appliquer les classes et méthodes paramétrables
Mettre en œuvre la généricité dans le cas d’un héritage
Prérequis
Notion de base de la programmation Objet java
Durée
1.5 heure
Contenu
Généricité : principe de typage, usages
Classes génériques et contraintes sur les types
Implémentation de méthodes génériques
Généricité et héritage
class Test<T>
{ // on va déclarer un objet de type T
T obj;
Test(T obj) { this.obj = obj; } // constructeur
public T getObject() { return this.obj; }
}
class Main
{ public static void main (String[] args)
{
// instance de type integer
Test <Integer> iObj = new Test<Integer>(15);
System.out.println(iObj.getObject());
class Main
{ public static void main (String[] args)
{
Test <String, Integer> obj =
new Test<String, Integer>("GfG", 15);
obj.print();
}}
Exemple
class Test
{
// exemple de méthode générique
static <T> void genericDisplay (T element)
{
System.out.println(element.getClass().getName() +
" = " + element);
}
// Driver method
public static void main(String[] args)
{
// appel de la méthode générique avec un argument integer
genericDisplay(11);
Output :
java.lang.Integer = 11
java.lang.String = GeeksForGeeks
java.lang.Double = 1.0
Remarques
1) Lorsque nous déclarons une instance de type générique, l'argument de type passé au
paramètre doit être un objet. Nous ne pouvons pas utiliser de types de données primitifs comme
int, char.,
Test<int> obj = new Test<int>(20);
Exemple
class Test<T>
{
T obj;
Test(T obj) { this.obj = obj; }
public T getObject() { return this.obj; }
}
class Main
{
public static void main (String[] args)
{
// instance de type Integer
Test <Integer> iObj = new Test<Integer>(15);
System.out.println(iObj.getObject());
Output:
Error :
incompatible types :
Test cannot be converted to Test
Même si iObj et sObj sont de type Test, ce sont des références à des types différents car leurs
paramètres sont de type diffèrent.
Exercice
La classe suivante [2] Tableau encapsule un tableau d'entiers et comporte deux méthodes
permettant de trier le tableau et d'afficher son contenu. La méthode main de cette classe fournit
un exemple d'utilisation. On voudrait disposer d'une méthode de tri pour n'importe quel type de
tableau. Proposez une solution basée sur la généricité.
4. L’héritage et la généricité
Une classe générique [3]peut agir comme une superclasse ou être une sous-classe. Dans une
hiérarchie, tous les arguments type nécessaires à une superclasse générique doivent être
transmis dans la hiérarchie par toutes les sous-classes.
Il faut suivre certaines règles lors de la création d’une classe générique en tant que superclasse
ou sous-classe.
1- Une classe générique peut hériter une classe non générique.
class NonGeneric
{
//Classe non générique
}
class Generic<T> extends NonGeneric
{
//Classe générique hérite une classe non générique
}
2- Une classe générique peut également hériter une autre classe générique. Lorsqu’une classe
générique hérite une autre classe générique, la sous-classe doit avoir au moins le même type et
le même nombre de paramètres type.
class A<T>
{
//Superclasse générique avec un seul type
}
class B<T> extends A<T>
{
//Sous-classe avec le même type
}
class C<T, E> extends A<T>
{
//Sous-classe avec deux types
}
class D<K, V> extends A<T>
{
//Erreur de compilation, sous-classe ayant différents types
}
3- Lorsqu’une classe générique hérite une autre classe générique, les types sont passés de la
sous-classe à la super-classe comme dans le cas du chaînage de constructeur où le constructeur
de la super-classe est appelé par le constructeur de la sous-classe en passant les arguments
requis.
Par exemple, dans le programme ci-dessous, « T » dans « A » sera remplacé par String.
MHAFDHI Houda 10 | P a g e
Programmation Objet avancée
class A<T>
{
T var;
public A(T var)
{
this.var = var;
}
}
class B<T> extends A<T>
{
public B(T var)
{
super(var);
}
}
public class Main
{
public static void main(String[] args)
{
B<String> b = new B<String>("WayToLearnX");
System.out.println(b.var);
}
}
MHAFDHI Houda 11 | P a g e