Tentative de génériques-si un code hérité, je suis coincé. J'ai un parentObject qui encapsule un objet ChildObject pour fournir des opérations de type groupe sur ChildObject. Le plus utilement, il permet l'itération sur la collection d'objets enfants. Lorsque j'essaie d'ajouter des génériques au mixage, je n'arrive pas à le rendre convivial avec la méthode itérateur sans une erreur de "naming clash", ou dans l'exemple ci-dessous, un "Le type de retour est incompatible avec l'erreur Iterable.iterator() ". Des suggestions? (Question bonus - est-il une meilleure façon d'écrire la méthode thegetChildObjectByIndex d'éviter() pour éviter d'avertissement autre que complier d'effacement de type supprimer les avertissements?) Merci beaucoup à l'avance pour toute aideProblème de génériques Java
public class ParentObject implements Iterable<ChildObject> {
protected List<? super ChildObject> theChildObjects;
@SuppressWarnings("unchecked")
public <T extends ChildObject> T getChildObjectByIndex(int idx) {
return (T)theChildObjects.get(idx);
}
public Iterator<? super ChildObject> iterator() {
return java.util.Collections.unmodifiableCollection(this.theChildObjects).iterator();
}
}
Sont ces '? super' et 'T s'étend' absolument nécessaire? Sinon, supprimez-les. Sinon, mettez à jour votre question pour clarifier l'exigence de conception fonctionnelle à propos de ces nécessités plus. Alors seulement, nous pouvons suggérer les meilleures généra- tions appropriées. – BalusC
De votre description, je suis prêt à parier que «super» ne signifie pas ce que vous pensez que cela signifie. –
Vous auriez gagné ce pari, mais pas plus ... – Chris