Bonjour
Je suis en mode éponge sur le langage Java en ce moment, et je dois avouer que certaines choses m'échappent, au niveau des meilleures pratiques à adopter.
Situation :
J'ai 3 classes qui n'héritent de rien (toutes des classes mères):
- Instrument
- Musicien
- Factory
Dans ma classe Factory, j'ai :
- un HashMap d'entiers et de Musiciens
- un HashMap d'entiers et d'Instruments
Et également une méthode permettant la suppression d'un Musicien.
Dans ma classe Musicien, je possède un attribut "perso" de type Instrument. (dans lequel on stockera l'instrument personnel du musicien)
Dans ma classe Instrument, je possède un attribut "lock" qui vaut "true" si l'instrument en question appartient à un musicien :
Problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part protected boolean lock;
Lorsque j'appelle ma méthode de suppression d'un musicien, j'entre l'id voulu (entier) et je le supprime de la liste de classe Factory, et j'aimerais conserver son instrument, en remettant l'attribut "lock" de celui-ci à false. (pour qu'il puisse être réaffecté)
Seulement j'ai beau modifier dans mon HashMap d'instrument à l'id correspondant, il me laisse toujours cet attribut à "true" et je ne peux plus utiliser l'instrument qui a appartenu au musicien supprimé.
Voici mon code de suppression :
Ici, je pense j'appelle sans problème la méthode du main qui va libérer l'objet voulu.
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 Saisie hSaisie = new Saisie(); System.out.println("Veuillez entrer le numéro du musicien à supprimer :"); int num = hSaisie.saisieInt(); Main hMain = new Main(); // si le musicien est trouvé dans la liste if (tMusiciens.remove(num) != null) { // liberer l'instrument hMain.unlock(num); // on va chercher dans les orchestres ... // tout un tas de traitement pas en rapport System.out.println("Le musicien " + num + " a été supprimé"); } else { System.out.println("Aucun musicien portant le numéro " + num + " n'éxiste dans la liste"); } return tMusiciens;
Et ici voici le code de hMain.unlock() :
Je vérifie si l'id existe dans le HashMap, je récupère l'objet, je modifie l'attribut lock, et j'écrase l'objet qui existait avec le même id.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void unlock(int id) { if (this.tInstruments.containsKey(id)) { Instrument tmp = this.tInstruments.get(id); tmp.lock = false; this.tInstruments.put(id, tmp); } }
Quelqu'un aurait-il une idée d’où vient le problème svp ?
Il n'y a aucune erreur de compilation, et mon programme fonctionne normalement, il y a juste le lock qui ne se modifie pas !
Partager