Je lis le didacticiel Java sur des caractères génériques en génériques. Dans le code suivant:
void printCollection(Collection<?> c) { for (Object e : c) { System.out.println(e); } }
3 Réponses :
dans FAQ sur les génériques Java de Angelika Langer , question "Quelle est la différence entre le sans engagement caractères paramétrés génériques et le type brut? " ( lien ) Vous verrez que collection > code> et
collection
Ils ne sont pas du tout équivalent quand il s'agit d'y ajouter des choses.
Dans le cas de la deuxième déclaration, le "?" Wildcard signifie que le générique n'est pas défini. Le résultat est que le type est lié à "objet" car il s'agit de la limité par défaut pour aucune déclaration. p>
En fait, même "INTEGER" est une sous-classe d'objet. Si vous voulez dire "INT", vous avez raison, c'est une primitive et non un dérivé d'objet, mais vous ne pouvez pas la mettre dans une collection, car une collection n'autorise que des dérivés d'objet. P>
Et à la question si les éléments mis dans la collection devraient être coulés. Non, ce n'est pas nécessaire car ils sont classes de dérivation claires de l'objet. Le compilateur n'a pas besoin d'aucune information moulante explicite, il résout la définition de la bonne classe automatiquement. P>
Vous l'avez presque exactement en arrière. p>
A D'autre part, une collection Collection
objet code> et sous-classes de celui-ci, et puisque tout (y compris
chaîne code>) est une sous-classe de
Objet code>, vous pouvez ajouter quelque chose à une telle collection. Cependant, vous ne pouvez apporter aucune hypothèse sur son contenu, sauf qu'ils sont
objet code> s. p>
> code> ne contient que des instances d'un type em> spécifique em> inconnu (et ses sous-classes), mais depuis que vous ne savez pas Quel em> type c'est, vous ne pouvez rien ajouter (sauf
null code>) à une telle collection, ni aucune hypothèse sur ses conants (sauf qu'ils sont
objet code > s, parce que tout est). P>