ArrayList.remove() 没有删除对象

ArrayList.remove() is not removing object

我有一个对象为 Player 的 ArrayList。当我尝试从列表中删除该对象时,控制台中没有出现任何错误,但该对象并未被删除。这是因为如果我 System.out.println(ArrayList);我删除对象后,它仍然打印出刚刚删除的对象。

我在这里管理和创建 ArrayList:

public class CreatureManager {

    protected Handler handler;

    private ArrayList<Creature> creatures;
    private final Player player;

    public CreatureManager(Handler handler) {
        this.handler = handler;
        player = new Player(handler, 1280, 720);
        creatures = new ArrayList<>();
    }

    public void addCreature(Creature e) {
        creatures.add(e);
    }

    public void removeCreature(Creature e) {
        creatures.remove(e);
    }

    public void tick() {
        for (Creature e : creatures) {
            e.tick();
        }
    }

    public void render(Graphics g) {
        for (Creature e : creatures) {
            e.render(g);
        }
    }

    public Player getPlayer() {
        return player;
    }

    public ArrayList<Creature> getCreatures() {
        return creatures;
    }

}

ArrayList 中的通用“Creataure”指的是以下内容class:

public abstract class Creature {

    protected Handler handler;

    protected int x, y;
    protected int width, height;
    protected Rectangle bounds;

    public Creature(Handler handler, int x, int y, int width, int height) {
        this.handler = handler;
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;

        bounds = new Rectangle(0, 0, width, height);
    }

    public abstract void tick();

    public abstract void render(Graphics g);

}

这里添加arraylist中的对象(Player),在程序开始时调用运行:

    public void renderCreatures() {
        handler.getCreatureManager().addCreature(new Player(handler, 1280, 720));
    }

arraylist 中的对象 (Player) 正在被删除,arraylist(正在使用 getter 调用的 getPlayer() 调用,其中 returns arraylist)被打印到之后这样控制台:

handler.getCreatureManager().removeCreature(handler.getCreatureManager().getPlayer());
System.out.println(handler.getCreatureManager().getCreatures());

控制台的输出(来自arraylist的Sysout)证明刚刚删除的对象还在arraylist中:

[dev.l0raxeo.entities.creatures.Player@3661db4d]

当你调用 renderCreatures 时,你添加了一个 new Player 但没有在任何地方保存对它的引用(例如在 player 字段中),所以当你调用 getPlayer(),这将返回一个不同的 Player 对象。 (如果您打印 getPlayer(),您会发现它是一个不同的实例。)

相反,只需继续将 player 添加到您正在创建它的构造函数中的列表中。