Bonjour à tous,

comme l'intitulé l'indique, j'ai un problème de template. Voici comment on peut le résumer :
Une interface A
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public interface A <T,U extends A>
{
	public T getPoint();
	public U next();
}
implémentée par une classe B
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public class B implements A<C,B>
{
	public C getPoint();
	public B next();
}
(C est une classe quelconque)
et enfin on a une classe D
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
public class D<T extends C>
{
	public void setPoint(T point)
	{}
}
Et, là où ça pêche, c'est dans une fonction template qui utilise une classe héritant de A et une classe D :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public static<T extends A> void superFunction(T monHeritageDeA, D d)
{
	d.setPoint(monHeritageDeA.getPoint());
}
Là, ça ne compile pas, parce que T représente une classe de type A sans paramètre template, et lorsqu'on fait d.setPoint, la fonction s'attend à recevoir un objet héritant de C. Or j'aimerais pouvoir préciser que monHeritageDeA hérite de quelque chose du genre A<C,...>. Ainsi, il n'y aurait plus de problème. Voyez-vous comment faire quelque chose de ce type (qui ne compile pas bien sur) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public static<T extends A<U extends C, V>> void superFunction(T monHeritageDeA, D d)
{
	d.setPoint(monHeritageDeA.getPoint());
}
Merci d'avance !