Bonjour à tous,
comme l'intitulé l'indique, j'ai un problème de template. Voici comment on peut le résumer :
Une interface A
implémentée par une classe B
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(); }
(C est une classe quelconque)
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(); }
et enfin on a une classe D
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
6 public class D<T extends C> { public void setPoint(T point) {} }
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> void superFunction(T monHeritageDeA, D d) { d.setPoint(monHeritageDeA.getPoint()); }
Merci d'avance !
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()); }
Partager