#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);
}
}