Java - ArrayList返回Empty

时间:2017-04-13 13:07:05

标签: java arrays arraylist encapsulation

我在名为Inventory的类中创建一个数组列表。这里有添加,删除和获取列表的方法。我在一个名为combat的新类中创建一个新的数组列表,并使用get方法将此数组列表设置为Inventory类中的数组列表。

这是库存类的一部分:

private ArrayList<String> inventory;

public Inventory() {
    this.inventory = new ArrayList<>();
}

public void addToInventory(String item) {
    inventory.add(item);
    System.out.println("A " + item + " has been added to your inventory");
    printInventory();
}

public void removeFromInventory(String item) {
    inventory.remove(item);
}

public ArrayList<String> getInventory() {
    return inventory;
}

这是在战斗类:

private Inventory inventory = new Inventory();
private ArrayList<String> playerInventory = inventory.getInventory();

public Combat() {

}

@Override
public void setPlayerHit() {
    System.out.println(playerInventory);

当我调用print playerInventory行时,arrayList返回[]。然而在库存类中,当我在我的启动器类中添加一个项目时,它有一些东西:

playerInventory.addToInventory(item.getItem(9));

我可以使用公共字段来使用它,但是想要使用封装并使用getter和setter。我可以得到一些指示吗?

2 个答案:

答案 0 :(得分:2)

在这里猜测,但听起来你在代码的不同部分使用了单独的Inventory个对象。它们不会共享相同的内部inventory数组列表,添加到一个Inventory对象的项目不会出现在另一个Inventory对象中。确保您要打印的Inventory对象与添加项目的对象相同。

如果您想要一个全局public class Inventory { private static Inventory instance = new Inventory(); private ArrayList<String> inventory; public static Inventory getInstance() { return instance; } // private constructor to prevent extra copies of the inventory private Inventory() { inventory = new ArrayList<>(); } ... } 对象,可以使用单例:

{{1}}

答案 1 :(得分:0)

  

当我调用print playerInventory行时,arrayList返回[]

您没有在清单中插入任何字符串...因此空列表...

顺便说一下,这是多余的:

private ArrayList<String> playerInventory = inventory.getInventory();

因为您正在使用具有ArrayList

的库存对象

再次尝试,但在做之前

public Combat() {
    inventory.addToInventory("f1");
    inventory.addToInventory("f2");
}

现在您的库存对象有2个元素