У меня есть группа: родительский объект и дочерний объект. Объекты могут быть прикреплены друг к другу после инстанцирования. Я хотел бы иметь круговую ссылку между этими объектами, но поддерживать повторное использование на не, имеющей зависимость.Циркулярные ссылки Пример
Например: родитель Firewall
, а ребенок Route
. Я хотел бы прикрепить Route
к Firewall
и наоборот. На Route
я позвоню this.getParent()
и предоставит Firewall
.
Как это сделать?
ОК, так что я добавить немного кода в качестве примера:
public class Firewall_Record extends DefaultDevice implements Comparable, Serializable {
private Object parent;
public void addRoute(Route r){
r.setParent(this);
}
public void setparent(Object o){...}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof Firewall_Record)) {
return false;
}
Firewall_Record rhs = (Firewall_Record) obj;
return new EqualsBuilder().
append(this.parent, rhs.parent).
isEquals();
}
}
public class Route_Record implements Comparable, Serializable {
private Object parent;
public void setparent(Object o){...}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof Firewall_Record)) {
return false;
}
Firewall_Record rhs = (Firewall_Record) obj;
return new EqualsBuilder().
append(this.parent, rhs.parent).
isEquals();
}
}
Я не хочу, чтобы вернуться назад и изменить все классы для расширения в какой-то базовый класс, который реализует Serializable, если я могу избежать Это.
Я создал этот интерфейс, который бы разрешил мою проблему установки общего родительского объекта, а не создания зависимостей. Я изо всех сил пытаюсь найти способ применить его.
public interface ParentInterface<T> {
T getParent();
void setParent(T t);
}
Почему вы считаете, что вам нужна круговая зависимость? (Кстати, это не так сложно сделать, что вы сделали, чтобы заставить это работать, и где вы споткнулись?) – Makoto
У модели есть круговая задача, а затем просто пусть она круглая. – AlexWien
Если брандмауэр должен ссылаться на маршрут, он должен зависеть от маршрута. Если Route должен ссылаться на брандмауэр, то он должен зависеть от брандмауэра. Вы можете изменить муфту, но никогда не удаляйте ее. – DwB