java - 对象引用案例研究

标签 java

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

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 
   }

最佳答案

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);
}

关于java - 对象引用案例研究,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867304/

相关文章:

java - 如何确定我的应用程序是否在 Android 上运行

Java JSR 文档

java - 无法在 WebRTC 视频通话中打开摄像头服务

java - 可以输入整数,为什么还要输入字符串,然后解析成整数呢?

java - Java中.indexOf方法的算法选择

java - 安卓资源$NotFoundException

java - 如何按输入顺序保存和检索共享首选项中的数据?

java - 如何在 Hibernate 中动态设置@Column 名称

java - 私有(private)类型..错误

java - JUnit5 - @CsvSource - 将源代码转换为 POJO