java 观察者造成循环继承
java observers causing cyclic inheritance
假设我有两个 类:A
和 属性 A.a
,B
和 属性 B.b
。
A
中的某些属性依赖于B.b
,但A.a
不依赖于B.b
。
B
中的某些属性依赖于A.a
,但B.b
不依赖于A.a
。
我希望 A
收到 B.b
更改的通知,B
收到 A.a
更改的通知。如果我使用标准观察者模式:
public class A implements B.Observer {..}
public class B implements A.Observer {..}
我收到一个编译器错误:
cyclic inheritance involving B (or A).
我意识到这通常会导致无限循环,但在这种情况下不会。例如,如果 A.a
发生变化,A
将通知 B
。但是由于A.a
对B.b
没有影响,所以没有return通知A
也没有循环
我很欣赏 Java
试图防止一般问题,但我需要以某种方式实现它。有什么建议吗?
使用 publish-subscribe pattern,其中每个 类 既是发布者又是订阅者。
interface Publisher {
void addSubscriber(Subscriber sub);
}
interface Subscriber {
void handle (Object event);
}
class A implements Publisher, Subscriber {...}
class B implements Publisher, Subscriber {...}
如果您不介意使用一些 JavaFX 技术,那么您应该研究一下 properties and binding,这将使您获得类似于您已有的东西,但这次没有编译器错误
假设我有两个 类:A
和 属性 A.a
,B
和 属性 B.b
。
A
中的某些属性依赖于B.b
,但A.a
不依赖于B.b
。
B
中的某些属性依赖于A.a
,但B.b
不依赖于A.a
。
我希望 A
收到 B.b
更改的通知,B
收到 A.a
更改的通知。如果我使用标准观察者模式:
public class A implements B.Observer {..}
public class B implements A.Observer {..}
我收到一个编译器错误:
cyclic inheritance involving B (or A).
我意识到这通常会导致无限循环,但在这种情况下不会。例如,如果 A.a
发生变化,A
将通知 B
。但是由于A.a
对B.b
没有影响,所以没有return通知A
也没有循环
我很欣赏 Java
试图防止一般问题,但我需要以某种方式实现它。有什么建议吗?
使用 publish-subscribe pattern,其中每个 类 既是发布者又是订阅者。
interface Publisher {
void addSubscriber(Subscriber sub);
}
interface Subscriber {
void handle (Object event);
}
class A implements Publisher, Subscriber {...}
class B implements Publisher, Subscriber {...}
如果您不介意使用一些 JavaFX 技术,那么您应该研究一下 properties and binding,这将使您获得类似于您已有的东西,但这次没有编译器错误