Generics. Composition et héritage
Bonjour, j'ai le code suivant qui n'est pas générique
Code:
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:
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 !