COURS 2. STRUCTURES DE DONN´
EES ET INTERFACES GRAPHIQUES 2.1. STRUCTURES DE DONN´
EES
incompatible types
found : java.util.Vector<java.lang.Integer>
required: java.util.Vector<java.lang.Object>
Vector<Object> v2 =v1;
Ce comportement n’est pas tr`es intuitif.
Egalit´
e des types g´
en´
eriques
Une autre particularit´e est que deux sp´ecialisations du mˆeme type g´en´erique sont ´egaux. Ainsi le programme suivant affiche
true :
1import java.util.Vector;
2class SousTypage {
3public static void main(String [] argv) {
4Vector<Integer> v1 = new Vector<Integer>();
5Vector<Object> v2 = new Vector<Object>();
6System.out.println(v1.getClass()==v2.getClass());
7}
8};
Ainsi donc on constate ici que v1 et v2 ont le mˆeme type mais que l’op´eration d’affectation v2=v1 est impossible comme dans
l’exemple pr´ec´edent.
Jokers
Les types jokers (wildcard) permettent d’utiliser des types g´eneriques sans les nommer. Ainsi la d´eclaration de la m´ethode
java.util.Containers.disjoint pour tester si deux s´equences n’ont pas d’argument en commun est :
class Collections {
static boolean disjoint(Collection<?> c1, Collection<?> c2);
...
}
Ce qui est ´equivalent `a :
class Collections {
static <T> boolean disjoint(Collection<T> c1, Collection<T> c2);
...
}
Le fait de ne pas nommer le type g´en´erique Tmais d’utiliser `a la place ?donne une ´ecriture plus lisible et permet de ne pas
utiliser le nom Tsi on en a besoin ailleurs.
Jokers contraints
On peut ´egalement contraindre les types g´en´eriques “?”. Imaginons que nous voulions effectuer une op´eration interdite
comme-ci dessous :
Vector<Integer> v1;
Vector<Object> v2 = v1; // erreur `
a la compilation
La s´emantique de ce que nous voulons faire est quelque chose dans le genre :
Recopie une liste de type Vector<T> dans Vector<U> o`u Th´erite de U.
On peut alors coder cette s´emantique en ´ecrivant le type “? extends T” :
1import java.util.Vector;
2class MaClasse {
3public <T> void copy(Vector<T> dest, Vector<? extends T> src)
4{ /*... */ }
5}
Il existe ´egalement la syntaxe duale “? super T” pour d´ecrire un type dont Test un sous type ou Tlui mˆeme.
5