Bonjour à tous,
je rencontre un petit soucis de compréhension avec les générics et un héritage :
J'ai une classe abstraite PommeAbstraite :
et une classe PommeGolden qui hérite de PommeAbstraite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public abstract class PommeAbstraite { public abstract void setPommes(List<? extends PommeAbstraite> pommes); public abstract List<? extends PommeAbstraite> getPommes(); }
Je n'ai pas d'erreur sur le getPommes .. pk??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class PommeGolden extends PommeAbstraite { List<PommeGolden> pommes; @Override public void setPommes(final List<PommeGolden> pommes) { this.pommes = pommes; } @Override public List<? extends PommeAbstraite> getPommes() { return pommes; // fonctionne !! } }
sauf que sur mon setPommes j'ai l'erreur suivante : The method setPommes(List<PommeGolden>) of type PommeGolden must override or implement a supertype method ...
ça passe en mettant :
mais c'est sensiblement moche, puisque l'on peut passer tout ce qui étend PommeAbstraite et pas seulement des PommeGolden.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Override public void setPommes(final List<? extends PommeAbstraite> pommes) { this.pommes = (List<PommeGolden>) pommes; }
J'aimerais juste comprendre pourquoi ma première n'est pas bonne... vu que List<PommeGolden> devrait passer pour List<? extends PommeAbstraite>. Et pourquoi cela fonctionne pour le get alors que le principe est le même ?
merci d'avance![]()
Partager