Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同一类型的不同类具有相同的观察者,如何做?_Java_Static_Observers - Fatal编程技术网

Java 同一类型的不同类具有相同的观察者,如何做?

Java 同一类型的不同类具有相同的观察者,如何做?,java,static,observers,Java,Static,Observers,所以我在我的主函数中创建了一个类X,它有静态变量。我还向类X添加了一个观察者。 当我在另一个类中创建一个新的类X实例时,我的观察者不会再收到通知,因为它是类X的另一个类实例。我如何设法通知我的观察者,而不必通过我的整个程序传递该类X,这是非常不可能的? 问题是新创建的ClassX实例没有附加观察者 /*different file*/ public class CreatingNewX{ public void incrementSomeValue1(){ ClassX

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

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

更多关于instanceof:(底部)的信息。

请阅读并编辑您的问题。添加了一个示例,但实际上它比这个示例更大、更复杂。但由于我正在创建ClassX的新实例,并且只有主方法中的类实例附加了观察者,这行不通。我承认我还是有点不清楚你的问题是什么。你能澄清一下吗?为什么在别处需要ClassX的新实例?我想在update()方法中重新绘制()。我需要一个不同的类,因为它是一个必须使用ClassX的操作。即使我将观察者添加到操作中,也不会起作用,只有在调整大小时才会起作用。我设法每x毫秒更新一次,但根据分配,不允许您这样做。我设法将观察者作为静态类型添加到ClassX中。这可能是一个非常丑陋的解决方案,但它是有效的:D