【问题标题】:Unexpected type error while deleting an object删除对象时出现意外的类型错误
【发布时间】:2017-03-16 07:19:17
【问题描述】:

我有一个 EnemyVehicle 对象的 ArrayList。它的名字是敌人。当我尝试删除 EnemyVehicle 类的对象时,就像在这个 question 中一样,我收到了意外的类型错误:

required: valuable
found: value

这是我的代码:

private void enemiesTurn()
{
    for(int i = 0; i<enemies.size(); i++)
    {
        if(enemies.get(i).isDestroyed())
        {
            enemies.add(getNewRandomVehicle(difficulty));
            p1.setScore(p1.getScore() + 20);
            enemies.get(i) = null;
        }
    }    
}

我能做什么?

【问题讨论】:

  • 您不想从 ArrayList 中删除对象吗?如果是这种情况,您应该考虑迭代的顺序,如here 所述

标签: java null unexpectendoffile


【解决方案1】:

而不是enemies.get(i) = null;enemies.remove(enemies.get(i));

编辑:这是因为enemies.get(i) 是一个值,而不是变量,您不能在操作的左侧使用它。操作的左侧必须以某种方式包含变量。

【讨论】:

  • 但我试图从内存中删除对象,而不是从数组列表中
  • @EmreSülün 您不会从内存中删除对象。这是垃圾收集器的工作。
  • 虽然在迭代时删除enemies 的元素会导致ConcurrentModificationException
  • @EmreSülün Kayaman 是正确的。除非您在其他地方引用了该对象,否则一旦将其从数组列表中删除,垃圾收集器就会为您将其从内存中删除。
  • 我还有一个问题。这个错误的原因是什么?
【解决方案2】:

当您从 ArrayList 或任何 List 类型中删除内容时。您应该使用迭代器。

for (Iterator<ClassName> it = enemies.iterator(); it.hasNext();) {
     ClassName objectName = it.next();
     if(objectName.isDestroyed()) {
            enemies.add(getNewRandomVehicle(difficulty));
            p1.setScore(p1.getScore() + 20);
            it.remove();
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2018-12-29
    • 2015-03-02
    • 2019-11-27
    • 2013-11-20
    • 2011-11-09
    相关资源
    最近更新 更多