2015-08-04 2 views
0

У меня есть класс MainScreen, который создается при запуске. Как я могу получить поле объекта MainScreen из другого класса без повторного инициализации класса?Как обратиться к полю объекта в Java?

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

Пользователь '' пользователь 'MainScreen' должен быть передан' SomeOtherClass' каким-то образом. У вас несколько пользователей? – TheLostMind

+0

Да, у меня есть несколько пользователей – Ann

+1

Тогда как * TJ Crowder * говорит, вам нужно передать ссылку на этот конкретный экземпляр MainScreen на ваш 'OtherClass'. Конструктор или вспомогательный метод в 'OtherClass' будет делать – TheLostMind

ответ

3

Обычно пропусканием MainScreen экземпляр, созданный Main в OtherClass на каком-то этапе, например, с помощью OtherClass конструктора, а затем с OtherClass использовать getUser, чтобы получить пользователь.

Очень много менее идеальный подхода поставить public static поля на Main, который используется для хранения MainScreen ссылки, а затем OtherClass использовать. Опять же: не идеально, не в последнюю очередь потому, что сложнее писать тесты для классов и увеличивает связь между этими тремя классами.

+0

Хорошая идея. Благодаря ! – Ann

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(); 
    } 
} 
+0

ОП имеет * несколько пользователей * – TheLostMind

1

Это неправильно:

MainScreen.this.getUser(); 

Вы не можете ссылаться на this из другого класса. Один из способов получить User от OtherClass - это передать его в методе конструктора или сеттера.

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); 
    } 
} 
Смежные вопросы