Bonjour à tous !
Le programme sur lequel je travaille est destiné à un cabinet paramédical. Les visites des patients peuvent être de deux types : séances de rééducation ou entretiens. La plupart des traitements applicables sont similaires, mais quelques bricoles diffèrent, en particulier la méthode de facturation. J'ai donc une classe abstraite Session, et deux classes filles, Seance et Entretien. Pour les différencier, j'utilise un attribut type, qui prend la valeur seance si l'objet est de type Seance, et entretien si l'objet est de type Entretien :
Seulement, à un moment donné, j'ai besoin de parcourir toutes les sessions, et d'appliquer un traitement différent selon qu'il s'agit d'un type de session ou de l'autre. J'ai donc fait ça :
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 public abstract class Session { private int id; private Date date; private int duree; private int dureePreparation; private double tauxHoraire = 57.6; private int taches; private String notes; private boolean facture; private String type; //Méthodes abstraites } public class Seance extends Session { private ArrayList<Patient> patients; private String type = "séance"; private boolean bilanInitial=false; private boolean bilanRenouvellement=false; private boolean bilanRedige=false; private int deplacement=0; //Méthodes } public class Entretien extends Session { private Patient patient; private int taches = 0; private String type = "entretien"; //Méthodes }
Malheureusement, s.getType() renvoie null, ce qui lève une exception NullPointerException. Pourtant, le débogueur m'indique bien que type vaut "seance", mais je ne vois pas comment lui faire comprendre l'évidence...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ArrayList<Session> liste = getListeVisites(); for (Session s:liste) { if (s.getType ().equals ("séance")) { Seance enCours = (Seance) s; } else { Entretien enCours = (Entretien) s; } enCours.facturer(); //Suite du traitement
Merci de votre aide.
Partager