Метод Getter Setter в другом файле Java - PullRequest
2 голосов
/ 21 марта 2012

У меня есть три файла Java (Login.java, Sales.java), и я хочу передать переменную «Имя пользователя» другим 3 файлам Java, чтобы в Sales.java могло отображаться «Имя пользователя»

Это то, что я сделал, создать loginstaff.java:

public class LoginStaff {
    private String Username;
    public void LoginStaff() {
    }
    public void LoginStaff(String Username) {
        this.Username = Username;
    }
    public String getUsername() {
        return this.Username;
    }
    public void setUserame(String Username) {
        this.Username = Username;
    }
}

В Login.java enter image description here

...
String login = tfusername.getText();
LoginStaff loginstaff = new LoginStaff();
loginstaff.setUserame(login);
...

В Sales.java enter image description here ... LoginStaff loginstaff= новый LoginStaff ();System.out.println (loginstaff.getUsername ());...

Проблема в том, что я не могу получить имя пользователя в Sales, он возвратил "null".Я знаю, что это связано с новым объектом в другом классе, но я не знаю, как это исправить.

Ответы [ 4 ]

6 голосов
/ 21 марта 2012

Дело не в том, где вы это называете, а в том, что это два разных объекта. Это продемонстрировало бы ту же проблему в одном методе:

public void showProblem() {
    LoginStaff staff1 = new LoginStaff();
    // Assume typo in method name is fixed
    staff1.setUsername("foo");

    LoginStaff staff2 = new LoginStaff();
    System.out.println(staff2.getUsername()); // Prints null
}

Два разных объекта будут иметь два разных набора полей - это намеренно и хорошо. Вы не можете создать новый объект и ожидать, что он будет иметь все значения полей, которые вы установили для другого объекта.

По сути, проблема в том, что вам нужен код Sales, чтобы знать об объекте LoginStaff, созданном в вашем коде Login. Не зная больше о вашем дизайне, мы не можем сказать вам лучший способ достижения этого.

1 голос
/ 21 марта 2012

Если в одном классе вы делаете это:

LoginStaff loginstaff = new LoginStaff();
loginstaff.setUserame(login);

А в другом классе вы делаете это:

LoginStaff loginstaff = new LoginStaff();
loginstaff.getUsername();

Вы создаете два разных объекта. Таким образом, для второго объекта UserName никогда не был установлен. Если вы хотите получить доступ к тому же объекту, вам нужно будет сослаться на него. Обходной путь может заключаться в передаче объекта LoginStaff при инициализации объектов. Это позволит вам получить доступ к тем же настройкам.

0 голосов
/ 21 марта 2012

Когда вы создаете свой объект продаж, я предлагаю вам предоставить ему параметр MainClass (this).Очевидно, обновите свой конструктор продаж, чтобы отразить это.Это позволяет вам хранить идентичный MainClass в вашем классе продаж, который вы можете использовать для запроса имени или чего-либо еще, что вам может понадобиться.

В основном Sales s1 = new Sales (this);

У меня был похожий процесс, где у меня был класс UI bar, но мне нужно было запустить метод в основном классе, чтобы он действовал,пользователь нажал на кнопку в пользовательском интерфейсе.То, как я это сделал, имело общеклассное поле наверху моего основного класса.

так в основном:

public class MainClass() {
private InterfaceTab interfaceTab;
//Instantiate the field in the constructor or main method of MainClass, so that way both classes can access each other: 
interfaceTab = new InterfaceTab(this);
0 голосов
/ 21 марта 2012

В Sales.java

...
LoginStaff loginstaff = new LoginStaff();
loginstaff.getUsername();
...

Здесь 1-я строка создает новый объект с инициализацией переменных по умолчанию, который имеет тип null в случае типа String .Перед использованием getUsername () необходимо вызвать setUsername ()

Или создать cunstrocter в Sales.java , который принимает Объект LoginStaff и после установки имени пользователя в Login.java , передайте этот объект в Sales.java и в Sales.java вместо созданияновый LoginStaff объект, сохраните объект, переданный Login.java , а затем используйте getUsername ()

...