Java 将引用表单类a传递给类B,将引用表单类B传递给类a

Java 将引用表单类a传递给类B,将引用表单类B传递给类a,java,reference,null,Java,Reference,Null,到目前为止,我看到了一个类似的问题:,他刚刚要求把a班的推荐信传给B班 到目前为止,我只是通过构造器来完成的 只要我用这种简单的方法来做,这就行了 ... this.classA = new ClassA(classB); //getting the null reference this.classB = new ClassB(classA); //getting the reference from new ClassA ... classB将包含null,因为它是在

到目前为止,我看到了一个类似的问题:,他刚刚要求把a班的推荐信传给B班

到目前为止,我只是通过构造器来完成的

只要我用这种简单的方法来做,这就行了

...

    this.classA = new ClassA(classB); //getting the null reference

    this.classB = new ClassB(classA); //getting the reference from new ClassA

...
classB将包含null,因为它是在classA之后创建的,表示null引用已经存在

在类A中创建后,是否有其他方法访问引用

说的是新ClassB的参考

一个代码示例将是令人惊讶的,因为现在我不理解迄今为止通过创建多个构造函数所听到的“解决方案”。。。我甚至不确定它们是否有效

编辑:这就是我的结构


DestinationContentPanel-->DestinationMainPanel-->DestinationHealthMainPanel-->MainPanel这听起来像是一种您想要避免的设计。但是,如果必须这样做,我建议创建一个包含对这两个对象的引用的类,并将其传递给classA和classB:

class RefHolder {
  ClassA a;
  ClassB b;
}
然后使用它:

RefHolder r = new RefHolder();
r.a = new ClassA(r);
r.b = new ClassB(r);
//at this point, both classes can use the RefHolder that was passed
//to the constructors to access instances of ClassA and ClassB

但这只是一个解决方法,我建议不要使用这种循环依赖。

为什么这在架构上有意义?这是一个设计缺陷。您通常希望避免这样做。如果出于某种原因,您确实需要这样做,那么您可以创建一个静态方法,通过默认构造函数创建两个对象,然后使用setter相互引用。这首先实现了什么?思想。。OP?@BenR.:例如,双向关系在JPA中是非常常见的用例。但是您不使用构造函数来设置双向关系,而是在构建对象之后使用getter/setter!第二件事,就是这样做的问题?它解决了在ClassA中有一个空引用的问题,因为ClassB的实例被设置到ClassA中可用的RefHolder中。当然,您不能在ClassA的构造函数中使用classB的实例。