在 java 中将对象设置为同一 class 中的合作伙伴

Setting objects as partners within the same class in java

作为面向对象编程初学者课程的任务,我必须在 Partner class 中将两个对象设置为 "married"。

这是我一开始的尝试:

public class Partner {

  String name;
  String partner;



  public Partner(String name, String partner) {
    super();
    this.name = name;
    this.partner = partner;
  }

  public String getPartner() {
    return partner;
  }

  public void setPartner(Partner()) { //think i need the object here?
    this.partner = partner;         //however i don't know how
  }

  public String getName() {
    return name;
  }


  public static void main(String[] args) {
    Partner p1 = new Partner("Name1", idk);
    Partner p2 = new Partner("Name2", idk);

  }

}

我的问题是我不知道如何在 setPartner 方法中使用该对象,即使那是正确的方法。通过将其中一个对象的伙伴设置为 null.

也应该可以与另一个对象离婚

它还应该让合作伙伴自动注册为彼此结婚,如果他们中的一个被设置为与另一个结婚。例如,如果p1设置为p2的伙伴,p2也应该自动设置为p1的伙伴。

您是在问如何编写 setter 方法吗?像这样

    public void setPartner(String partner) {
        this.partner= partner;
    }
  1. 如果您打算让一个 Partner 对象有一个指向此 class 的另一个对象的指针,您应该将 String partner 更改为 Partner partner .

  2. 您不会总是在 Partner 构造函数中使用初始化的 Partner 对象,因此您有 3 个选项:

    • 添加另一个不需要 Partner
    • 类型参数的构造函数
    • 更改现有构造函数
    • 传递 null 作为参数。 在任何情况下,您都必须在其他地方初始化 partner 字段。
  3. 这就是 setter 发挥作用的地方。setPartner 函数的正确语法是:

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

    getPartner() 函数应相应更改为 return 正确的类型。

  4. 您在 main() 中的代码可以是这样的:

    Partner p1 = new Partner("Name1", null);
    Partner p2 = new Partner("Name2", p1);
    p1.setPartner(p2);
    
  5. It should also be possible to get a divorce from the other object by setting one of the objects' partner to null.

    这是通过使用 p.setPartner(null) 实现的,其中 p 是类型 Partner 的对象。您可能还想将两个对象 partners 设置为 null 而不是一个,以便于检查。

创建两个构造函数:一个仅包含 name,另一个包含 namepartner(类型为 Partner),以便您可以灵活地进行初始化仅具有名称的对象,然后设置其合作伙伴或使用名称和合作伙伴进行初始化(如果合作伙伴已知)。

public class Partner {

    private String name;
    private Partner partner;

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

    public Partner(String name, Partner partner) {
        this.name = name;
        setPartner(partner);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    @Override
    public String toString() {
        String value;
        if (partner != null) {
            value = name + ", partner=" + partner.name;
        } else {
            value = name;
        }
        return value;
    }

    public static void main(String[] args) {
        // Example 1
        Partner p1 = new Partner("Name1");
        Partner p2 = new Partner("Name2");
        p1.setPartner(p2);
        System.out.println(p1);
        System.out.println(p2);

        // Example 2
        Partner p3 = new Partner("Name3");
        Partner p4 = new Partner("Name4", p3);
        System.out.println(p3);
        System.out.println(p4);
    }
}

输出:

Name1, partner=Name2
Name2, partner=Name1
Name3, partner=Name4
Name4, partner=Name3