【问题标题】:Entity cannot be converted to ArrayList<Entity>实体无法转换为 ArrayList<Entity>
【发布时间】:2017-04-06 10:45:15
【问题描述】:

我想读出 ArrayList 的第一个元素。问题是当我构造一个返回方法时,我收到一条错误消息“实体无法转换为 ArrayList”。返回函数需要是一个公共 ArrayList,因为我使用 foreach 来返回值。谁能告诉我我做错了什么以及我可以做些什么来改进它?

实体管理器(公共 ArrayList)不起作用。

public class EntityManager {

private Handler handler;
private Player player;
private ArrayList<Entity> entities;
private int counter = 0;


private Comparator<Entity> renderOrder = new Comparator<Entity>(){
        @Override
        public int compare(Entity a, Entity b) {
                if(a.getY() + a.getHeight() < b.getY() + b.getHeight())
                        return -1;
                return 1;
        }
};

public EntityManager(Handler handler, Player player){
    this.handler = handler;
    this.player = player;
    entities = new ArrayList<Entity>();
    addEntity(player);
}

public void tick(){
   Iterator<Entity> it = entities.iterator();

   while(it.hasNext()){
        Entity e = it.next();
        e.tick();
        if(!e.isActief()){
            it.remove();
            counter();
            if(counter > entities.size() + 1){
               player.eindspel = true; 
            }
        }
    }
    entities.sort(renderOrder);
}

public void render(Graphics g){
    for(Entity e : entities){
        e.render(g);
    }
    player.postRender(g);
}
public ArrayList<Entity> getEntities() {
    return entities.get(0);
}
public void counter(){
    counter++;
}
public void addEntity(Entity e){
    entities.add(e);
}

public void setHandler(Handler handler) {
    this.handler = handler;
}

public void setPlayer(Player player) {
    this.player = player;
}

public void setEntities(ArrayList<Entity> entities) {
    this.entities = entities;
}

public Handler getHandler() {
    return handler;
}
public Player getPlayer() {
    return player;
 }
}

我用来从 getEntities 中读取值的 foreach

        for(Entity e : handler.getWereld().getEntityManager().getEntities()){
        if(e.equals(this)){
            continue;
        }
        if(e.getCollisionBounds(0, 0).intersects(ar)){
            if(opslag.delete()){
                e.delete(2);                    
            }
        }
    }

我想要的结果是当 e 相交时,我想删除我通过“return entity.get(0)”获得的实体,所以我的实体数组列表的第一个实体。只有那个方法不起作用,当我使用“返回实体”时,我的所有实体都会被删除,而不仅仅是第一个。

【问题讨论】:

  • 我不明白你的 getEntities() 方法的逻辑。该方法名称和返回类型清楚地表明您返回了几个实体,但您仍然在那里调用return entities.get(0);?这怎么可能?
  • 我想将 getEntities 方法更改为,而不是让所有实体只获取我的数组列表中的第一个实体。

标签: java arraylist


【解决方案1】:

如果您将外部接口概括为使用 List 而不是 ArrayList(请参阅 here 为什么这是个好主意),您可以只使用 Collections.singletonList 来构造一个包含第一个实体的列表。

但是,对我来说,有一个名为 getEntities 的方法只返回一个实体似乎很不直观。当你想要获得所有实体时,我仍然没有真正得到,什么时候只有一个。也许您可以编辑您的问题以进一步解释您的用例

【讨论】:

    【解决方案2】:

    您正在实体上调用 delete(int) 方法

     e.delete(2);
    

    而且该方法适用于收集我认为这是您的问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 2012-04-25
      • 2012-04-02
      • 2015-07-14
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多