Bonjour à tous,

Je fais face au problème suivant:

Soit une classe B héritant d'une classe A.

L'exemple suivant "compile":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void test(){
     B b = new B();
     tester(b);
}
 
tester(A a){ }
Par contre, l'exemple suivant ne compile pas:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void test(){
     List<B> listeb  = new ArrayList<B>();
     tester(listeb );
}
 
void tester(List<A> listeA){ }
Logique puisque B hérite de A mais ArrayList<B> n'hérite pas pour autant d'ArrayList<A>

Du coup mon approche à été la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void test(){
     List<B> listeb = new ArrayList<B>();
     tester(listeb );
}
 
void <G extends A>tester(List<G> listeG){ }
La tout marche, la méthode tester est spécifiée comme prennant en paramètre une liste d'instance de la classe G, héritant de A. Cependant, quid des perfs, une approche aussi générique peut-elle avoir une incidance sur les performance (il s'agit de code très appellé et donc très critique en terme de performances).

Qui plus est je rajoute même une couche d'héritage, mon pattern de code étant similaire à:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
class Matching<T>{
...
 
void <G extends T>tester(List<G> listeG, List<Matching<T>> listeMatching)
 
}
Cordialement,
Benoît.