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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
protected boolean lock;
Problème :
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 :
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;
Ici, je pense j'appelle sans problème la méthode du main qui va libérer l'objet voulu.

Et ici voici le code de hMain.unlock() :
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);
    }
}
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.

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 !