Bonjour, j'ai le code suivant qui n'est pas générique

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
28
29
30
31
32
33
34
35
 
class A {
   protected B monB;
 
}
 
class B {
 protected A monA;
}
 
class SousA extends A {
 
  public SousA(SousB b){
    this.monB = b;
  }
 
  public void doIt(){
    ((SousB)monB).dansSousB();
  }
 
  public void dansSousA(){
    // ....
  };
}
 
class SousB extends B {
 
  public SousB(SousA a){
    this.monA = a;
  }
 
  public void dansSousB(){
    // ....
  };
}
Je souhaiterais rendre le code générique afin d'éviter le cast ((SousB)monB).dansSousB();

j'ai essayé ceci

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
28
29
30
31
32
33
34
35
 
class A <T extends B>{
   protected T monB;
 
}
 
class B <T extends A>{
 protected T monA;
}
 
class SousA extends A<SousB> {
 
  public SousA(SousB b){
    this.monB = b;
  }
 
  public void doIt(){
   monB.dansSousB();
  }
 
  public void dansSousA(){
    // ....
  };
}
 
class SousB extends B<SousA> {
 
  public SousB(SousA a){
    this.monA = a;
  }
 
  public void dansSousB(){
    // ....
  };
}
ça fonctionne mais j'ai deux warning sur les classes parentes :
class A <T extends B>
class B <T extends A>
Le warning est : A is a raw type. References to generic type A<T> should be parameterized et B is a raw type. References to generic type B<T> should be parameterized

Quelle est la solution pour ne pas tourner en rond (à cause de la bi-directionalité) ? Un SuppressWarning n'est pas conseillé au niveau de la classe...

Merci !