Java 由单例代码中的循环创建的堆栈溢出
我有两个单例类,让我们称它们为classJava 由单例代码中的循环创建的堆栈溢出,java,stack-overflow,cycle,circular-dependency,Java,Stack Overflow,Cycle,Circular Dependency,我有两个单例类,让我们称它们为classA和classB 这些课程看起来像这样 class A { private static A instance; private A(int timeout) { init(); } public static A getInstance(int timeout) { if(instance == null) { instance = new A(timeout);
A
和classB
这些课程看起来像这样
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
,哪个调用B
,哪个调用a
。。。,没有重新设计就可以解决此问题,或者重新设计类的工作方式是解决此循环导致此错误的唯一方法?要创建a
的实例,您需要调用Monitor::sendMonitorStatus
。要调用Monitor::sendMonitorStatus
,您需要A
的实例。你有一个依赖循环
你需要重新设计这个。具体方式–这取决于你想要实现什么。是的,我担心没有办法。
A
填充在另一个类中创建的对象列表,并且B
以消息协议将这些对象的消息发送到另一个类。我可能需要添加另一个类,然后它听起来像是要摆脱这种相互依赖。