Java - ArrayList 返回空

标签 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;
}

这是在战斗类(class)中:

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

我可以使用公共(public)字段来实现此功能,但想利用封装并使用 getter 和 setter。请问我可以得到一些指示吗?

最佳答案

只是在这里猜测,但听起来您在代码的不同部分使用单独的 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<>();
    }

    ...
}

关于Java - ArrayList 返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43393196/

相关文章:

java - 实体管理器,创建查询

c - 如何在c中声明与int的位大小相对应的数组?

java - 如何使用 Javassist 制作 ArrayList

javascript - 计算一个值被表示的次数

java - 尝试理解泛型

java - android中如何检测ArrayList内容一段时间没有改变?

java - 如何更新 jar 文件中的参数?

java - Leetcode220错误: incomparable types: int and <null>

java - 哈希表实现 iterate 和 findMin

java - 为什么在尝试存储字节数组时会出现 java.lang.NullPointerException?