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 : 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();
}
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
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 : 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;
	}
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 ?

merci d'avance