acceder à setChanged depuis une instance qui etend Observable dans une methode doSomething(Observable obs)
Bonjour à tous
J'ai une classe MaClasse qui étend Observable
J'ai une autre classe qui contient la méthode doSomething(Observable obs) suivante:
Code:
1 2 3 4
|
public void doSomething(Observable obs){
obs.notifyObservers()
} |
Je met le code de la méthode notifyObservers de la classe Observable pour que mon problème soit plus facile à comprendre :
Code:
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);
} |
Comme on peut le constater si la variable changed n'est pas à true, on ne notifie pas les observers
Or pour modifier cette variable il faut appeler la méthode suivante :
Code:
1 2 3 4
|
protected synchronized void setChanged() {
changed = true;
} |
qui comme on peut le voire est protected
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 :mrgreen:
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 ;)