同一类型的不同类与观察者相同,怎么办?

时间:2016-06-10 13:12:43

标签: java static observers

所以我在我的main函数中创建了一个类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);
    }   
}

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,我相信您正在寻找一种方法来检查传递到update方法的Observable对象是否是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
        }
    }

更多关于instanceof:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html(在底部)。