我有一个类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();
}
}
答案 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();
}
}