所以我在我的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);
}
}
答案 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(在底部)。