Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java让类相互获取信息_Java - Fatal编程技术网

Java让类相互获取信息

Java让类相互获取信息,java,Java,假设有两个类,一个叫做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 print

假设有两个类,一个叫做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=newmain;第二秒=新的第二秒;如果没有堆栈溢出异常,您应该怎么做?

不要使用这种初始化,在另一个类中为每个类添加一个setter,并在构造后设置

Main m = new Main();
Second s = new Second();
m.setSecond(s);
s.setMain(m);

不要使用这种初始化,在另一个类中为每个类添加一个setter,并在构造后设置

Main m = new Main();
Second s = new Second();
m.setSecond(s);
s.setMain(m);
假设Main和Second的实例应相互包含引用,则可以将引用传递给构造函数:

Main的构造函数:

public Main (Second second)
{
    this.second = new Second (this);
}
public Second (Main main)
{
    this.main = main;
}
第二名建造师:

public Main (Second second)
{
    this.second = new Second (this);
}
public Second (Main main)
{
    this.main = main;
}
如果,正如名称所暗示的,Second依赖于Main,即如果没有Main的封闭实例,Second不存在,那么您可以将Second定义为Main的内部类,在这种情况下,它将隐式地保存封闭类Main的实例

假设Main和Second的实例应该相互引用,您可以将引用传递给构造函数:

Main的构造函数:

public Main (Second second)
{
    this.second = new Second (this);
}
public Second (Main main)
{
    this.main = main;
}
第二名建造师:

public Main (Second second)
{
    this.second = new Second (this);
}
public Second (Main main)
{
    this.main = main;
}
如果,正如名称所暗示的,Second依赖于Main,即如果没有Main的封闭实例,Second不存在,那么您可以将Second定义为Main的内部类,在这种情况下,它将隐式地保存封闭类Main的实例