1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Coord<Double> c1 = obtenirUnCoordDouble(); // ne cherchons pas à savoir quelle classe a été utilisée pour obtenir ça. Double étend Number, donc on a le droit d'avoir une variable comme ça.
Coord<Integer> c2 = obtenirUnCoordInteger(); // même chose
// cet appel est-il autorisé ? Bien sûr que non ! getDiffFrom() ne fait pas de calculs quand l'un des objets est à base de Double et l'autre Integer !
Coord<QuelTypeIci> resultat = c1.getDiffFrom(c2);
// mais voyons maintenant plus loin :
Coord<?> c3 = c1; // on peut faire ça sans problème. c1 est basé sur Double, mais si on préfère perdre cette information dans une autre variable, et retenir qu'on sait pas trop sur quoi se base cette Coord, on peut, aucun souci.
Coord<?> c4 = c2; // même chose
// Et donc c3 et c4 déclarent le même typage Coord<?>, bien que les objets vers lesquels elles pointent sont les mêmes que c1 et c2 dont le typage est différent. Pourquoi, parce que ça consiste à dire qu'on sait pas tout sur leur paramétrage.
// Et donc peut-on faire ceci:
Coord<?> resultat2 = c3.getDiffFrom(c4);
// Ben ce serait dommage, puisque c3 et c4 c'est les mêmes objets que c1 et c2, et on a vu pourquoi il est évident que ça ne peut pas marcher.
// résultat des courses, le langage ne peut évidemment pas autoriser à ce que <?> soit considéré comme "le même" qu'un autre <?>. Puisqu'il est si facile de prendre <A> et <B> et de les mettre dans <?> et <?>. |
Partager