7
votes

Comment les caractères génériques fonctionnent dans Java

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);
    }
}


0 commentaires

3 Réponses :


0
votes

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 et collection sont presque équivalents.


1 commentaires

Ils ne sont pas du tout équivalent quand il s'agit d'y ajouter des choses.



0
votes

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.

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.

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.


0 commentaires

5
votes

Vous l'avez presque exactement en arrière.

A Collection peut contenir objet et sous-classes de celui-ci, et puisque tout (y compris chaîne ) est une sous-classe de Objet , vous pouvez ajouter quelque chose à une telle collection. Cependant, vous ne pouvez apporter aucune hypothèse sur son contenu, sauf qu'ils sont objet s.

D'autre part, une collection ne contient que des instances d'un type spécifique inconnu (et ses sous-classes), mais depuis que vous ne savez pas Quel type c'est, vous ne pouvez rien ajouter (sauf null ) à une telle collection, ni aucune hypothèse sur ses conants (sauf qu'ils sont objet s, parce que tout est).


0 commentaires