2016-06-10 3 views
-1

Also erstelle ich eine Klasse X, die statische Variablen hat, in meiner Hauptfunktion. Ich füge auch einen Beobachter zur Klasse X hinzu. Wenn ich eine neue Instanz der Klasse X in einer anderen Klasse erstelle, werden meine Beobachter nicht mehr benachrichtigt, weil es eine andere Klasseninstanz der Klasse X ist. Wie schaffe ich es, meine Beobachter sowieso, ohne diese Klasse X durch mein ganzes Programm zu bestehen, was ziemlich unmöglich ist? Das Problem besteht darin, dass den neu erstellten Instanzen von ClassX kein Beobachter zugeordnet ist.Verschiedene Klassen des gleichen Typs mit dem gleichen Beobachter, wie zu tun?

/*different file*/ 
public class CreatingNewX{ 
    public void incrementSomeValue1(){ 
     ClassX x = new ClassX(); 
     x.someMethod(); 
    } 
} 

/*different file*/ 
public class observer implements Observer { 
    private ClassX ClassXValue = null; 

    public observer(ClassX ClassXValue){ 
     this.ClassXValue = ClassXValue; 
    } 

    public void update(Observable obs, Object obj){ 
     if(obs == ClassXValue){ 
      /*do something*/ 
     } 
    } 

} 

/*different file*/ 
public class ClassX extends Observable { 
    private static int somevalue1; 
    private static int somevalue2; 
    private static int somevalue3; 

    public void someMethod(){ 
     somevalue1++; 
     setChanged(); 
     notifyObservers(); 
    } 

} 

/*different file*/ 
public class Main{ 
    public static void main(String[] args) { 
     ClassX X = new ClassX(); 
     ClassObserver observer = new ClassObserver(X); 
     X.addObserver(observer); 
    } 
} 
+3

Bitte lesen Sie [MCVE] und bearbeiten Sie Ihre Frage. – Frank

+0

Hinzugefügt ein Beispiel, aber in Wirklichkeit ist es größer und komplizierter als dieses Beispiel. – LifeisHard

Antwort

0

Wenn ich Ihre Frage richtig verstanden habe, ich glaube, Sie nach einem Weg suchen, um zu überprüfen, ob ein beobachtbares Objekt übergeben in Ihre update Methode ist eine Instanz vom Typ ClassX. Sie sollten den Operator instanceof verwenden, der true zurückgibt, wenn das angegebene Objekt eine Instanz des angegebenen Klassentyps ist, und false, wenn das Objekt null ist oder nicht.

public void update(Observable obs, Object obj){ 
     if(obs instanceof ClassX){ 
      /*do something*/ // this will only execute if 'obs' is of type ClassX 
     } 
    } 

Mehr auf Instanceof: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html (nach unten hin).

+0

Da ich jedoch eine neue Instanz von ClassX erstelle und nur die Instanz der Klasse in der Hauptmethode Beobachter hat, funktioniert sie nicht. – LifeisHard

+0

Ich gebe zu, ich bin immer noch ein wenig unklar, was dein Problem ist. Könnten Sie das klären? Warum brauchen Sie eine neue Instanz von ClassX woanders? – lucasvw

+0

Ich möchte in der update() -Methode neu streichen(). Ich brauche eine andere Klasse, weil es eine Aktion ist, die ClassX verwenden muss. Selbst wenn ich der Aktion Beobachter hinzufüge, funktioniert es nicht, nur wenn ich die Größe ändere. Ich habe es alle x Millisekunden mit einem Update geschafft, aber das darf man nicht entsprechend der Zuweisung tun. – LifeisHard

Verwandte Themen