J'apprends des génériques Java récemment, et j'essaie juste d'aller si «Java Generics FAQ».
Question inférieure à la question (n ° 304) en ce qui concerne le type paramétré par paramétrage générique, j'apprécierais votre aide. P> Exemple de code: P>
boolean equal = box.equalTo(box);
equal = box.equalTo(new Box<String>("abc"));
4 Réponses :
La méthode N'oubliez pas que le compilateur utilisera le type statique de l'objet à la compilation. p> Donc, cela échouera: p> mais ce ne sera pas le cas: p> EGALTO code> prend une boîte case > code>. Lorsque vous avez un objet de type case > Code>, vous ne pouvez pas mettre case case > Code> comme paramètre à EMMALTO code> puisque les types t code> des deux cases peuvent ne pas être identiques. Box<String> b = new Box<String>();
b.equalTo(new Box<String>("abc");
boolean equal = box.equalTo(box);
Je pense que c'est une mauvaise compagnie de dire que les génériques C # sont au moment de l'exécution.
ne peut pas comprendre pourquoi au-dessous de deux méthodes appelées échouera p>
Ils échouent parce que c'est la façon dont la carte générique fonctionne. p>
La carte générique représente "un type de type que nous ne connaissons plus". P>
Faisons une classe plus simple.
public boolean equalTo(Box<?> other);
case > code> est "une boîte d'inconnu". Li>
-
boîte étend la chaîne> code> serait "une boîte de choses qui sont au moins des chaînes" li>
-
case code> est définitivement em> "une boîte de chaînes". li>
- Donc, si nous avons une "boîte d'inconnu", et nous essayons de mettre un type (dire une chaîne) dedans. Le compilateur n'est pas sûr. C'est une boîte d'inconnu. Et si cela n'accepte réellement que des entiers? LI>
- pouvons-nous mettre un
null code> dans "boîte d'inconnu"? Bien sûr. Li>
- Qu'est-ce que nous "obtenons ()" d'une "boîte d'inconnu"? au moins un objet. li>
étant donné que, p> xxx pré> Son demandeur de compilateur d'oublier d'oublier code> et suppose case code> est " une boîte d'inconnue ". Les erreurs que vous voyez, pointez que le compilateur ne peut plus faire la vérification des arguments. Il ne peut pas vérifier que le type donné appartient à l'inconnu ou non (sauf pour NULL). P> ul>
Qu'est-ce que l'erreur dit et qu'est-ce que vous ne comprenez pas à ce sujet?
@Sotiriosdelimanolis vient de penser que le paramètre pour Egalto () sera la boîte > Et ne comprenez pas pourquoi la boîte > Impossible d'accepter "Boîte" et "Nouvelle boîte (" ABC ")" comme argument.
Lorsque vous dites une erreur, utilisez-vous une erreur de compilateur ou une erreur d'exécution?
@ Erreur de compilation SMAC89 pour tous les cas dans cet exemple
Martin Odersky a une fois écrit dans un courrier électronique à la mailingle Scala qu'il estime que seules trois personnes dans le monde comprennent les génériques Java. Et il devrait savoir, après tout, il les a conçus. (Notez que j'ai eu l'impression du ton de l'email qu'il n'inclut pas parmi ceux qui les comprennent.) Alors, vous ne devriez donc pas me sentir mal à ce sujet :-d
@ Jörgwmittag bon de connaître cette histoire :)