由单例代码中的循环造成的堆栈溢出

Stack overflow created by a cycle in code with singletons

我有两个单例 classes,我们称它们为 class A 和 class B.

class看起来像这样。

class A
{
  private static A instance;

   private A(int timeout)
   {
     init();
   }

    public static A getInstance(int timeout)
    {
      if(instance == null)
      {
        instance = new A(timeout);
      }
      return instance;
    } 

    private void init()
    {
      new Monitor().sendMonitorStatus();
    }
}

和 class B

class B
{
private static B instance;

   private B(A a)
   {

   }

    public static B getInstance(A a)
    {
        if(instance == null)
        {
            instance = new B(a);
        }
        return instance;
    }
}

然后还有一个名为 Monitor 的 class 看起来也是如此。

class Monitor
{
  public void sendMonitorStatus()
  {
    B.getinstance(A.getinstance(10));
  }
}

如您所见,问题是我得到一个 Whosebug,因为它保持一个循环,先调用 B,然后调用 A,然后调用 B它调用了 A...,是否可以在不重新设计的情况下解决这个问题,或者是解决导致此错误的循环的唯一方法是重新设计 classes 的工作方式?

要创建 A 的实例,您需要调用 Monitor::sendMonitorStatus。要调用 Monitor::sendMonitorStatus,您需要一个 A 的实例。你有一个依赖周期。

你需要重新设计这个。具体如何——这取决于你想要实现什么。