En fait ça marche pas du tout.
Je reprends:
et:
dans la classe Toto j'ai un champs:
Code :
- protected List<X> listeX;
|
et son getter:
Code :
- public List<X> getListX()
- {
- return listX;
- }
|
maintenant les choses se compliquent, dans la classe Tutu, j'ai:
Code :
- public List<Y> getListX() // Il faut que ça soit le même nom que la méthode correspondante dans la classe parente
- {
- return super.getListX(); // à cet endroit j'ai essayé le java.util.Collections.copy() mais ça marche pas
- }
|
et ça ne marche pas, il veut pas compiler.
J'ai essayé:
Code :
- public List<Y> getListX()
- {
- List<Y> result = new ArrayList<Y>();
- java.util.Collections.copy(super.getListX(), result);
- return result;
- }
|
mais ça ne marche pas.
J'ai aussi essayé avec des
et
un peu partout, mais rien à faire.
Je perds énormément de temps avec ce problème, si quelqu'un pouvait m'expliquer ce qui ne va pas je lui en serais très reconnaissant.
Merci.
EDIT:
La meilleure solution que j'ai trouvée est la suivante:
Code :
- // Dans la classe Toto:
- protected List<? extends X> listeX;
- // et le getter:
- public List<? extends X> getListeX()
- {
- return listeX;
- }
- // Dans la classe Tutu:
- public List<Y> getListeX()
- {
- List<Y> result = new ArrayList<Y>();
- List<? extends X> listeParente = super.getListeX();
- for (int i = 0; i < listeParente.size(); i++)
- result.add((Y) listeParente.get(i))
- return result;
- }
|
Voilà ça a l'air de marcher, sauf que je me suis rendu compte d'un autre problème dans la méthode qui permet d'ajouter un élément dans la listeX de la classe mère Toto:
Code :
- public void addX(X x)
- {
- listeX.add(x); // erreur: the method add(List<? extends X> ) in the type List<? extends X> is not applicable for the argument (X)
- }
|
Message édité par cimourdain le 23-05-2008 à 16:41:25