Bonjour à tous,
voilà mon problème: j'utilise une API qui me permet d'ajouter des critère dans un objet requête. Voici une présentation de l'interface que je dois utiliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
public Interface ISelectRequestBuilder {
  void addBlocType1(Type1 arg);
  void addBlocType2(Type2 arg);
  void addBlocType2(List<Type2> arg);
  void addBlocType3(Type3 arg);
  void addBlocType3(List<Type3> arg);
  ....
}
Tous les Type1, Type2, Type3... dérivent d'un même type. Appelons le "AbstractType".

Ce que j'essaie de faire, sans succès pour l'instant , c'est un adapteur générique du genre:
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
16
17
18
19
20
21
22
23
24
25
26
27
public Class MonAdapteur implements ISelectRequestBuilder{
  private ISelectRequestBuilder adpatee = null;
  public MonAdapteur(ISelectRequestBuilder adaptee){
    this.adaptee = adaptee;
  }
 
  // Les methodes adapatees
  public void addBlocType2(Type2 arg){
    adaptee.addBlocType2(arg);
  }
 
  // La partie adapteur
  public void addBloc(List<T extends AbstractType> arg){
    // Si la liste est null ou vide 
    if (criteres == null || criteres.size() < 1) {
	// On ne fait rien
	return;
    }
 
    // Recuperation du premier element pour determiner le type
    T critere = criteres.get(0);
    if (critere instanceof Type1) {
	adaptee.addBlocType1((Type1) critere);
    }
    // else if .....
  }
}
J'ai pensé à paramétré ma classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public Class MonAdapteur<T extends AbstractType> implements ISelectRequestBuilder ....
 
MonAdapteur<Type3> monAdapteur = new MonAdapteur<Type3>(..);
.....
mais je ne voit pas de grande différence

Ma question est la suivante: existe-t-il une façon de faire qui permette d'éviter d'utiliser 'instanceof' et d'utiliser le polymorphisme ?


Merci pour votre aide