2016-06-10 42 views
-1

所以我在我的主函數中創建了一個具有靜態變量的類X.我還爲X類添加了一個觀察者。 當我在另一個類中創建類X的新實例時,我的觀察者不再收到通知,因爲它是X類的另一個類實例。如何設法通知我無論如何,無需通過我的整個程序,這是不可能的,通過類X的觀察員? 問題是新創建的ClassX實例沒有附加觀察者。同一個觀察者的同一類型的不同類,怎麼辦?

/*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

請閱讀[MCVE]並編輯您的問題。 – Frank

+0

增加了一個例子,但實際上它比這個例子更大更復雜。 – LifeisHard

回答

0

如果我正確理解你的問題,我相信你正在尋找一種方法來檢查,如果傳遞給你的方法update可觀察的對象是ClassX類型的實例。您應該使用instanceof運算符,如果給定對象是給定類類型的實例,則返回true;如果對象爲null或不是該類類型,則返回false。

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

更多關於實例的信息:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html(接近底部)。

+0

但是由於我正在創建一個ClassX的新實例,並且只有主方法中類的實例有觀察者連接,所以它不起作用。 – LifeisHard

+0

我承認我對你的問題還是有點不清楚。你能澄清嗎?爲什麼在其他地方需要一個新的ClassX實例? – lucasvw

+0

我想在update()方法中重繪()。我需要一個不同的類,因爲它是一個必須使用ClassX的動作。即使我將觀察者添加到該動作中,也只有在調整大小時纔會起作用。我每x毫秒就設法做一次更新,但不允許根據作業來完成此操作。 – LifeisHard

相關問題