Je pense que cette section de Génériques Tutoriel vous explique la situation (je souligne):
"Vous avez besoin pour faire certain que l'API générique n'est pas trop restrictive; il doit
continuer à soutenir le contrat original de l'API. Considérons à nouveau quelques exemples
à partir de java.util.Collection. Le pré-générique de l'API ressemble:
interface Collection {
public boolean containsAll(Collection c);
...
}
Une naïve tentative de generify c'est:
interface Collection<E> {
public boolean containsAll(Collection<E> c);
...
}
Tout cela est certainement le type de sécurité, il n'est pas à la hauteur de l'API du contrat initial.
Le containsAll() la méthode fonctionne avec n'importe quel type de l'arrivée de la collection. Il ne
réussir si la future collection vraiment ne contient que des instances de E, mais:
- Le type statique de l'entrants
collection peut être différente, peut-être
parce que l'appelant ne connaît pas le
précise le type de la collection en cours
passé, ou peut-être parce que c'est un
Collection<S>,où S est un
sous-type d'E.
- Il est parfaitement
légitime d'appeler containsAll() avec
une collection d'un type différent. L'
routine de travail, retour faux."