由单个代码中的循环创建的堆栈溢出

时间:2015-07-23 17:54:59

标签: java stack-overflow cycle circular-dependency

我有两个单身类,我们称之为课程A和课程B

这些课程看起来像这样。

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();
    }
}

以及课程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 Monitor
{
  public void sendMonitorStatus()
  {
    B.getinstance(A.getinstance(10));
  }
}

您可以看到的问题是,我得到stackoverflow,因为它会保持对B的呼叫循环,然后调用调用A的{​​{1}}来调用B A ...,无论如何都可以在没有重新设计的情况下解决这个问题,或者是解决此循环的唯一方法,导致此错误重新设计类的工作方式?

1 个答案:

答案 0 :(得分:2)

要创建A的实例,您需要致电Monitor::sendMonitorStatus。要致电Monitor::sendMonitorStatus,您需要一个A的实例。你有一个依赖循环。

你需要重新设计它。具体如何 - 这取决于你想要达到的目标。