Предположим, у меня есть два класса: A
с недвижимостью A.a
, B
с недвижимостью B.b
.java наблюдатели, вызывающие циклическое наследование
Некоторые свойства в 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
, нет обратного уведомления A
и нет цикла.
Я ценю, что Java
пытается предотвратить общие проблемы, но мне нужно каким-то образом реализовать это. Какие-либо предложения?
Он похож на тебя» пытаюсь решить что-то с наследованием, которое не должно решаться с наследованием. Я бы хотел использовать общий интерфейс уведомлений, возможно, как PropertyChangeListener, но в остальном использовать композицию. –
Если вы удалите B.Observer из B и A.Obseserver из A, это должно решить проблему – ControlAltDel
Я не уверен, что вы подразумеваете под «B.Observer» и «A.Observer». Стандартный шаблон наблюдателя имеет только один интерфейс Observer, реализованный всеми наблюдателями. – CKing