实体无法转换为ArrayList <entity>

时间:2017-04-06 10:45:15

标签: java arraylist

我想读出ArrayList的第一个元素。问题是当我构造一个返回方法时,我得到一个错误,说“实体”无法转换为ArrayList&#39;。返回函数需要是一个公共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;
 }
}

我正在使用的foreach从getEntities中读出值

        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;返回entities.get(0)&#39;,所以我的实体arraylist的第一个实体。只有那种方法不会起作用,当我使用“返回实体”时我的所有成员都被删除了,而不仅仅是第一个。

2 个答案:

答案 0 :(得分:0)

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

然而,对我来说,让一个名为getEntities的方法只返回一个实体似乎是非常不直观的。当你想要获得所有实体时,我仍然没有真正得到,只有一个实体。也许您可以编辑您的问题以更多地解释您的用例

答案 1 :(得分:0)

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

 e.delete(2);

并且该方法适用于收集我认为它是你的问题来自。