Как получить доступ к нескольким объектам из другого метода в том же классе java?

#java

Вопрос:

Вот мой код, я пытаюсь получить доступ к e1,e2,e3 в своем методе getData (), но он не работает. Как мне заставить мой второй метод распознавать первые, но при этом разделять методы?

 public class Model {

    public Model() {
        loadData();
    }

    public void loadData() { 
        Employee e1 = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");

        Employee e2 = new Employee("Kyle Alston",  "State College, PA.", "SmithTown");

        Employee e3 = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");
        
      
    }
    public String getData(int n)  { 
        if(n == 1){
            return e1;

        }
        if(n == 2){
            return e2;

    }
        if(n == 3){
            return e3;

    }
        
        
        
    }
}
 

Я попробовал Model data = new loadData().e1, но я не думаю, что это работает.

Заранее спасибо. Мне не разрешается изменять параметры.

Комментарии:

1. Вам нужно понять «область применения». Переменные e1, e2, e3 просто не существуют , когда loadData не выполняется. Вы должны объявить их как переменные экземпляра (члена). Сказав это, код был бы более лаконичным, используя массив.

2. @user16632363 значит, к ним нет доступа?

3. Вы не можете получить доступ к чему-то, чего не существует , Переменные появляются при вводе loadData и перестают существовать непосредственно перед возвращением из loadData.

4. @user16632363 означает ли это, что мой метод loadData() бесполезен?

5. Ваш loadData() метод создает сотрудников, которые все теряются, когда метод завершает выполнение.

Ответ №1:

Используйте переменные-члены для сохранения значений от одного метода к другому.

 public class Model {

    private Employee e1, e2, e3;

    public Model() {
        loadData();
    }

    public void loadData() { 
        e1 = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");
        e2 = new Employee("Kyle Alston",  "State College, PA.", "SmithTown");
        e3 = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");    
    }

    public String getData(int n)  { 
        if (n == 1) {
            return e1;
        }
        if (n == 2) {
            return e2;
        }
        if (n == 3) {
            return e3;
        }
        return null;
    }
}
 

Для сравнения, переписано с использованием простого массива. Преимущество здесь в том, что getData теперь не зависит от количества сотрудников.

 public class Model {

    private Employee[] e;

    public Model() {
        loadData();
    }

    public void loadData() { 
        e = new Employee[3];
        e[0] = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");
        e[1] = new Employee("Kyle Alston",  "State College, PA.", "SmithTown");
        e[2] = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");    
    }

    public String getData(int n)  { 
        if (n <= 0 || n > e.length) {
           return null;
        }
        return e[n-1];
    }
}
 

Я мог бы рассмотреть возможность использования списка массивов, а не массива, но массив является более фундаментальным в Java, что, я думаю, делает его лучшим выбором для начального обучения.