class A { B b; setB(B b) { B oldb = this.b; this.b = b; if (this.b.equals(oldb)) { return; } if (oldb.getA().equals(this)) { oldb.setA(null); } if (b != null && !b.getA().equals(this)) { b.setA(this); } } } class B { A a; setA(A a) { A olda = this.a; this.a = a; if (this.a.equals(olda)) { return; } if (olda.getB().equals(this)) { olda.setB(null); } it (a != null && !a.getB().equals(this)) { a.setB(this); } } }