Не удается увидеть элементы ArrayList в другом объекте в Java

#java #arraylist

#java #arraylist

Вопрос:

Я пытаюсь просмотреть элементы ArrayList в другом классе, но это показывает, что там ничего нет. Однако в другом классе вы можете увидеть элемент в ArrayList .

Вот коды.

Первый класс

 import java.util.ArrayList;
public class Test {

ArrayList<String> inventory = new ArrayList<String>();

public void test() {
  inventory.add("item");
}

public void check() {
  System.out.println(inventory);
}

}
  

Второй класс

 import java.util.ArrayList;
public class Test2 {

Test testObj = new Test();

public void test2() {
  System.out.println(testObj.inventory);
}

}
  

Основной класс

 public class Main {

  public static void main(String[] args) {
    Test testObj = new Test();
    Test2 test2Obj = new Test2();
    testObj.test();
    testObj.check();
    test2Obj.test2();
  }
}
  

Вывод

 [item]
[]
  

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

1. Потому что это разные объекты. Каждое использование new создаст новый отдельный объект, каждый из которых содержит свой собственный набор полей. Таким образом, список в новом Test отличается от списка в Test , хранящегося в Test2

Ответ №1:

В Java переменные уровня класса ассоциируются с объектом до тех пор, пока они не будут объявлены static .

С помощью Object associated связано то, что когда объект инициализируется с помощью ключевого слова new в Java, у всего объекта будет своя память и собственные переменные класса.

В вашем случае внутри метода main при создании объекта Test класса и при создании другого объекта тестового класса внутри класса Test2 оба будут полностью независимы друг от друга. И оба будут иметь свою собственную память и собственные переменные.

Если вы хотите, чтобы обновления inventory переменных из первого объекта были доступны в другом объекте, вам нужно объявить его как статический и инициализировать внутри статического блока. Статические переменные являются общими для всех объектов класса. Как показано ниже:

 static ArrayList<String> inventory;

static {
        inventory = new ArrayList<String>();
}
  

Ответ №2:

В вашем основном методе вы вызываете метод, который обрабатывает операцию добавления, но вы не вызываете никаких методов add во втором классе и в вашем основном методе.

  testObj.test();
 testObj.check();
  

Этот показывает, что вы добавляете элемент в arraylist и показываете его. Но во втором классе вы ничего не добавляете, а вызываете его. Следовательно, нет способа показать какой-либо элемент из этого метода. Что должно быть сделано, так это то, что вам просто нужно вызвать метод добавления внутри второго класса, а затем попытаться использовать метод отображения.

Ответ №3:

Вы не вызывали test() метод в Test2 классе. Чтобы это заработало, измените Test2 класс следующим образом.

 
import java.util.ArrayList;
public class Test2 {

Test testObj = new Test();

public void test2() {
  testObj.test();
  System.out.println(testObj.inventory);
}

}