2016-06-10 44 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