class A {
    private B b = new B();
}

class B {
    private A a;
    public void setA(A a){
        this.a = a
    }
}


在启动A的实例后调用setA。我想这样做,因为A有一个B要在其中调用的方法。

最佳答案

这里A组成B。

class A {
    private B b = new B();
}


B组成A:

class B {
    private A a;
    public void setA(A a){
        this.a = a
    }
}


无需设计判断,假设您需要双向依赖,则应避免使用初始化程序或构造函数来创建此类的实例,因为您需要A的实例来创建B,反之亦然。如您的示例代码中那样,以非对称方式进行此操作以某种方式隐藏了这两个类之间的关系。
因此,您可以使用设置器或工厂方法来使其更清晰。

设置方法:

class A {
    private B b;
    public void setB(B b){
        this.b = b;
    }
}

class B {
    private A a;
    public void setA(A a){
        this.a = a
    }
}

A a = new A();
B b = new B();
a.setB(b);
b.setA(a);


或者使用工厂方法,您可以根据客户的需求POV依赖于A或B类公开工厂方法:

class A{
    // ...
    public static A ofWithB(){
      A a = new A();
      B b = new B();
      a.setB(b);
      b.setA(a);
      return a;
    }
}

A a = A.ofWithB();
B b = a.getB();

关于java - 在Java中,类可以引用包含它的另一个类的实例吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56516793/

10-11 00:10