如何在Java中引用对象的字段?

时间:2015-08-04 08:55:38

标签: java

我有一个类MainScreen,它在启动时被实例化。如何在不重新实现类的情况下从另一个类获取MainScreen对象的字段?

public class MainScreen {
  private String user;
  public String getUser() {
     return user;
  }
}

public class OtherClass {
  public void getTheUser() {
    MainScreen.this.getUser(); // Here I want to get the user from instantiated main's mainscreen
  }
}

public class Main() {
  public static void main(String[] args) {
    new MainScreen();
  }
}

3 个答案:

答案 0 :(得分:3)

通常,在某个阶段将MainScreen创建的Main实例传递到OtherClass,例如通过OtherClass构造函数,然后OtherClass使用getUser来吸引用户。

一种非常不理想的方法是在public static上放置Main字段,用于存储MainScreen引用,然后OtherClass使用该字段。再说一次:不理想,尤其是因为它使得为类编写测试变得更加困难,并增加了三个类之间的耦合。

答案 1 :(得分:1)

这是错误的:

  MainScreen.this.getUser();

您无法从其他班级引用this。从User获取OtherClass的方法之一是在构造函数或setter方法中传递它。

public class MainScreen {
    private String user;
    public MainScreen(String user){
        this.user = user;
    }
    public String getUser() {
       return user;
    }
}
public class OtherClass {
    String user;
    public OtherClass(String user){
        this.user = user;
    }

  public String getUser() {
    return this.user; 
  }
}


public class Main() {
  public static void main(String[] args) {
      String user = "user1";
      new MainScreen(user);
      new OtherClass(user);
  }
}

答案 2 :(得分:0)

您可以使用Singleton Pattern

public class MainScreen {
  private String user;

  private static volatile MainScreen instance = null;
  private MainScreen () { }
  public String getUser() {
     return user;
  }

  public static synchronized MainScreen getInstance() {
    if (instance == null) {
        instance = new MainScreen();
    }

    return instance;
  }

}

public class OtherClass {
  public void getTheUser() {
    MainScreen mainScreen = MainScreen.getInstance(); // Here I want to get the user from instantiated main's mainscreen
    mainScreen.getUser();
  }
}

public class Main() {
  public static void main(String[] args) {
    MainScreen mainScreen = MainScreen.getInstance();
  }
}