我们假设您有两个类,一个名为Main
,另一个名为Second
。 Second
需要从Main
获取变量,Main
需要从Second
示例:
public class Main
{
Second second = new Second();
public int firstInt = 5;
second.printThing();
}
public class Second
{
Main main = new Main();
public void printThing()
{
System.out.println(main.firstInt);
}
}
由于您无法在不出现堆栈溢出异常的情况下执行Main main = new Main();
和Second second = new Second;
,您应该做什么?
答案 0 :(得分:4)
假设Main
和Second
的实例应该保持对彼此的引用,您可以将引用传递给构造函数:
Main
的构造函数:
public Main (Second second)
{
this.second = new Second (this);
}
Second
的构造函数:
public Second (Main main)
{
this.main = main;
}
正如名称所暗示的那样,Second
取决于Main
(即没有Second
的封闭实例,Main
没有意义,您可以定义{ {1}}是Second
的内部类,在这种情况下,它将隐式保存封闭类Main
的实例。
答案 1 :(得分:0)
不要使用这种初始化,在另一个类中为每个类添加一个setter并在构造之后设置。
Main m = new Main();
Second s = new Second();
m.setSecond(s);
s.setMain(m);