我有两个单身类,我们称之为课程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
...,无论如何都可以在没有重新设计的情况下解决这个问题,或者是解决此循环的唯一方法,导致此错误重新设计类的工作方式?
答案 0 :(得分:2)
要创建A
的实例,您需要致电Monitor::sendMonitorStatus
。要致电Monitor::sendMonitorStatus
,您需要一个A
的实例。你有一个依赖循环。
你需要重新设计它。具体如何 - 这取决于你想要达到的目标。