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