给定两个类,相互创建每个类的对象会导致StackOverflow异常

时间:2012-03-20 19:24:12

标签: java object project-management

给定两个类,相互创建每个类的对象会导致StackOverflow异常。这是一个JAVA项目顺便说一句。

我的项目中有多个类,并且对于使用其他类,我想我会创建另一个类的对象并使用它。

假设我有类Main和类GUI。我在MAIN中创建了GUI对象并对其进行了初始化。同样,我在GUI中创建了一个MAIN对象并对其进行了初始化。

现在这给了我一个Stack Overflow Exception,因为构造函数调用正在进行递归。

我该怎么做?

我能想到的一个可能的解决方案是创建一个类STATIC的变量和方法。

还有其他解决方案吗?请建议。

2 个答案:

答案 0 :(得分:6)

您应该将其中一个类的实例传递给另一个类的构造函数。

public class Main {
   private final GUI gui;
   Main() {
      gui = new GUI(this);
   }
}

public class GUI {
   private final Main main;
   public GUI(Main main) {
      this.main = main;
   }
}

您也可以使用setter而不是构造函数。我不喜欢这个选项,因为你失去了使变量最终的能力。

public class Main {
   private GUI gui;
   Main() {
   }
   public void setGui(GUI gui) {
      this.gui = gui;
   }
}

public class GUI {
   private Main main;
   public GUI() {
   }
   public void setMain(Main main) {
      this.main = main;
   }
}

public static void main(String[] args) {
   Main main = new Main();
   GUI gui = new GUI();
   main.setGui(gui);
   gui.setMain(main);
}

答案 1 :(得分:0)

Singleton? (如果适用于您的应用)