Bonjour à tous
J'ai une classe MaClasse qui étend Observable
J'ai une autre classe qui contient la méthode doSomething(Observable obs) suivante:
Je met le code de la méthode notifyObservers de la classe Observable pour que mon problème soit plus facile à comprendre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void doSomething(Observable obs){ obs.notifyObservers() }
Comme on peut le constater si la variable changed n'est pas à true, on ne notifie pas les observers
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void notifyObservers(Object arg) { Object[] arrLocal; synchronized (this) { if (!changed) return; arrLocal = obs.toArray(); clearChanged(); } for (int i = arrLocal.length-1; i>=0; i--) ((Observer)arrLocal[i]).update(this, arg); }
Or pour modifier cette variable il faut appeler la méthode suivante :
qui comme on peut le voire est protected
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 protected synchronized void setChanged() { changed = true; }
Du coup depuis ma méthode doSomething je ne peux pas appeler setChanged sur mon objet MaClasse que j'ai passé en paramètre à la méthode doSomething
J'ai bien penser à créer une class qui étend la classe Observable qui surchargerait la méthode setChanged en la rendant public et l'utiliser dans mon projet à la place de la classe Observable ...
Mais je voudrais (en admettant que cela soit possible ... ) trouver un moyen pour éviter cela car je vais sans doute intégrer mon projet à un projet déjà existant, et si je peux éviter de me taper toutes les classes étendant la classe Observale ca serait bien cool
Même si cette solution est compliquée et/ou longue à mettre en place ce n'est pas un problème, je préfère passer du temps sur un problème comme celui la plutôt que passer du temps à faire du copier coller pour changer les classes qui étendent Observable dans mes différents projets
Partager