首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象引用案例研究

对象引用案例研究
EN

Stack Overflow用户
提问于 2010-05-20 00:06:55
回答 7查看 121关注 0票数 0

当人员1与人员3成为合作伙伴时,人员2不再将人员1作为合作伙伴,人员4不再将人员3作为合作伙伴。我该如何解决这个问题?

代码语言:javascript
复制
public class Person {

    private String name;
    private Person partner;

    public Person(String name){
        this.name = name;
    }

    public void setPartner(Person partner){
        this.partner = partner;
        partner.partner = this; 
    }

    public static void main(String[] args) {

        Person one = new Person("1");           
        Person two = new Person("2");
        Person three = new Person("3");
        Person four = new Person("4");

        one.setPartner(two);
        three.setPartner(four);

        one.setPartner(three);

        //Person two is still partner with person 1
        //and person four is still partner with person 3 
   }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-20 00:28:15

代码语言:javascript
复制
public void setPartner(Partner b) {
  // Special case, otherwise we'll have troubles
  // when this.partner is already b.
  if (this.partner == b) return;

  if (this.partner != null) {
    this.partner.partner = null;
  }

  this.partner = b;

  // Make sure that the new partner has the right partner.
  // This will make sure the original b.partner has its
  // partner field nullified.
  // Note that if we don't have the special case above,
  // this will be an infinite recursion.
  b.setPartner(this);
}
票数 3
EN

Stack Overflow用户

发布于 2010-05-20 00:09:40

代码语言:javascript
复制
public void setPartner(Person partner){
    if (this.partner != null) {
        this.partner.partner = null; // Reset the partner of the old partner.
    }
    this.partner = partner;          // Assign new partner.
    this.partner.partner = this;     // Set the partner of the new partner.
}
票数 2
EN

Stack Overflow用户

发布于 2010-05-20 00:09:23

我认为把它作为setPartner的第一行应该行得通:this.partner.partner = null;

当然,您必须检查this.partner是否为null

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2867304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档