Bonjour à tous,
Je suis face à un petit problème :
J'ai une classe abstraite Mere , dont dérive plusieurs classe Fille :
Mon code génère un ArrayList<Mere> à partir de plusieurs appel à une factory :
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
36
37 abstract class Mere() { public enum Types { TYPEA, TYPEB } protected Types mType; abstract public String getStr(); } class FilleA extends Mere() { public FilleA() { super(); mType = Types.TYPEA; } @Override public String getStr() { return "Fille A"; } } class FilleB extends Mere() { public FilleB() { super(); mType = Types.TYPEB; } @Override public String getStr() { return "Fille B"; } }
j'ai donc à ma disposition un tableau de plusieurs Mere (différente FilleA,B,C ...) avec chacune leur propre type.
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 public class FilleFactory { public static Mere getFille(Mere.Types type) { if(type.equals(Mere.Types.TYPEA)) { return new FilleA(); } else if (type.equals(Mere.Types.TYPEB)) { return new FilleB(); } else { throw new IllegalArgumentException("Bad Type"); } } private FilleFactory(){} }
A un moment donné j'extrait une classe Fille de ce tableau pour m'en servir.
J'ai alors besoin d'appeler la méthode getStr()Comment faire en sorte de caster objdans le bon type Fille pour être capable d'appeler la bonne méthode getStr() sachant que le type de ma classe est lié à l'attribut mType ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Mere obj = tab.get(10); obj.getStr();
Suis je obligé de passer tout en revu ? du genre :
sachant que je peux avoir plusieurs dizaine de types Fille différents , j'ai un peu peur de la tournure que le code risque de prendre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(obj instanceof FilleA) (FilleA)obj.getStr();
Merci pour vos conseils
Partager