Problème avec les Generics et héritage
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 :
Code:
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();
} |
et une classe PommeGolden qui hérite de PommeAbstraite :
Code:
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 !!
}
} |
Je n'ai pas d'erreur sur le getPommes .. pk??
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 :
Code:
1 2 3 4 5
|
@Override
public void setPommes(final List<? extends PommeAbstraite> pommes) {
this.pommes = (List<PommeGolden>) pommes;
} |
mais c'est sensiblement moche, puisque l'on peut passer tout ce qui étend PommeAbstraite et pas seulement des PommeGolden.
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 ? :cry:
merci d'avance :ccool: