A. Les classes
class Fruit {
}
class Pomme extends Fruit {
}
class Orange extends Fruit {
}
B. La classe du panier
public class Panier<E> {
private E element;
public void setElement(E x) {
element = x;
}
public E getElement() {
return element;
}
}
C. Un exemple d'utilisation
Panier<Fruit> monPanier = new Panier<Fruit>();
monPanier.setElement(new Pomme());
Fruit maPomme = monPanier.getElement();
D. ...avec transtypage
Pomme maPomme = (Pomme) monPanier.getElement();
|
Les génériques permettent donc de se libérer de certaines contraintes de type lors de l'écriture de programme. Prenons par exemple le cas d'un panier pouvant contenir des fruits comme des pommes ou des oranges. Nous avons tout d'abord les classes de nos fruits [A].
Puis vient la classe de notre panier [B].
"E" marque le type que nous prenons en argument. Notre classe peut aussi bien créer que renvoyer des objets de cet type - qui n'est pas encore précisé. Cette précision n'arrive que dans le courant du code, par exemple le code [C].
Notez que getElement() ne renverra pas un objet de type Pomme , mais de type Fruit : monPanier ne peut renvoyer que des objet du type avec lequel il a été construit. S'il est nécessaire d'obtenir une Pomme , il faudra passer par transtypage [D].
|