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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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);
    }
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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

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