gpt4 book ai didi

java - Java中如何删除关系

转载 作者:行者123 更新时间:2023-12-01 17:50:05 24 4
gpt4 key购买 nike

我正在练习 Java 并遇到了问题。我想让我的 setPartner 方法动态化,在 p1 和 p2 作为伙伴连接的场景中,如果我决定在 p1 和 p3 上调用 setPartner(),p2 就会断开连接。我怎样才能实现这个目标?

public class Partner {

private final String name;
private Partner partner;
private Partner unlinked;

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

public String getName() {
return name;
}

public Partner getPartner(){
if (partner != null){
return partner;
}
else {
return null;
}
}

public void setPartner(Partner p1, Partner p2){
if(p1 == null || p2 == null){
p1.partner = null;
p2.partner = null;
}
else{
p1.partner = p2;
p2.partner = p1;
System.out.println(unlinked);
}

}


public static void main(String[] args) {
Partner p1 = new Partner("JohnP1"); // Create Partner Objects
Partner p2 = new Partner("JaneP2");
Partner p3 = new Partner("JacksonP3");

// System.out.println(p1.getName()); // Test names
// System.out.println(p2.getName());

p1.setPartner(p1,p2); // set partners and test if relation works
p1.setPartner(p1,p3);

System.out.println(p2.getPartner().getName());

//p1.setPartner(p1, null); // test for null
//System.out.println(p2.getPartner().getName());



}
}

最佳答案

你可以这样做:

public class Partner {
private final String name;
private Partner partner;

public Partner(String name) {
if (name == null) throw new NullPointerException();
this.name = name;
}

public Partner getPartner() {
return partner;
}

public void setPartner(Partner p) {
// this is critical, or else we'll call each other forever in a loop
if (partner == p) {
// we're already partners with p; nothing to do
return;
}

if (partner != null) {
// already have a partner; tell them we're leaving, directly
partner.partner = null; // (we don't want them to call us back)
}
partner = p;
if (p != null) {
// new partner; let them know about us
p.setPartner(this);
}
}
}

最初它是在没有合作伙伴的情况下创建的。我无法查看 unlinked 字段或您在 getPartner 中进行的测试。所有工作都在setPartner中完成;有关详细信息,请参阅那里的评论。

更新:

当我们将合作伙伴的合作伙伴设置为 null 以告诉他们我们要离开时,我们必须直接执行此操作,而不是通过调用他们的 set 方法,否则他们会立即回电告诉我们他们要离开我们。我确信,任何与人际关系的关系都纯粹是巧合。此答案的早期版本有一个严重的错误。

关于java - Java中如何删除关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51265212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com