Учитывая два класса, создание объекта каждого класса в другом приводит к Исключению StackOverflow - PullRequest
0 голосов
/ 20 марта 2012

Учитывая два класса, создание объекта каждого класса в другом приводит к Исключению StackOverflow.Это проект JAVA, кстати.

В моих проектах есть несколько классов, и для использования других классов я подумал, что хотел бы создать объекты другого класса и использовать его.

Скажите, что у меня естьКласс Main и класс GUI.Я создал объект GUI в MAIN и инициализировал его.Точно так же я создал объект MAIN в GUI и инициализировал его.

Теперь это дает мне исключение переполнения стека, так как вызовы конструктора уходят глубоко в рекурсию.

Как мне поступитьэто?

Одно возможное решение, о котором я могу думать, - это создание переменных и методов одного класса STATIC.

Любое другое решение?Пожалуйста, предложите.

Ответы [ 2 ]

6 голосов
/ 20 марта 2012

Вы должны передать экземпляр одного из ваших классов в конструктор другого класса.

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

Вы также можете использовать сеттеры вместо конструкторов. Мне не очень нравится эта опция, потому что вы теряете возможность сделать ваши переменные окончательными.

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);
}
0 голосов
/ 20 марта 2012

Синглтон? (если это работает для вашего приложения)

...