从列表中删除java类

时间:2011-10-09 20:16:05

标签: java class list

我有一个包含很多课程的列表,在每个课程中,我想知道一种允许我像这样删除自己的方法:

public class World{
    List<Entity> Entities;
}
public class Entity{
    public void removeselffromlist()
    {
        //code i dont know
    }
}

编辑:不会有多个世界

3 个答案:

答案 0 :(得分:2)

您必须将该列表提供给其他类。一种可能的解决方案是:

public class World {
    List<Entity> entities;

    public void removeItem(Entity entity) {
        entities.remove(entity);
    }
}

public class Entity{
    public void removeSelfFromList() {
        world.removeItem(this);
    }
}

请注意,您需要在某处拥有“世界”对象。

答案 1 :(得分:2)

为了能够从列表中删除自己,Entity类需要引用它。实现这一目标的一种方法是通过World类上的公共方法控制对列表的添加/删除; e.g。

public class World {
  private final List<Entity> entities;

  public void addEntity(Entity entity) {
    if (entity.getWorld() != null) {
      throw new IllegalArgumentException("Entity already associated with a world: " + entity);
    }

    entities.add(entity);
    entity.setWorld(this);
  }

  public void removeEntity(Entity entity) {
    if (entity.getWorld() != this) {
      throw new IllegalArgumentException("Entity is not associated with this world: " + entity);
    }

    entities.remove(entity);
    entity.setWorld(null);
  }
}

public class Entity {
  private World world;

  public World getWorld() { return world; }
  public void setWorld(World world) { this.world = world; }

  public void remove() { 
    world.removeEntity(this);
  }
}

答案 2 :(得分:-1)

虽然我质疑这整个方法(不知道为什么你需要这样做的具体原因),答案是Entity类需要访问至少一个World实例,如果不是直接Entities列表。请注意,您应该使用camelCase;变量绝不应以大写字母开头。

public class World{
    private List<Entity> myEntities;

    public void addEntity(Entity e)
    {
        myEntities.add(e);
        e.setWorld(this);
    }

    public void removeEntity(Entity e)
    {
        myEntities.remove(e);
    }    

}
public class Entity{

    private World myWorld;

    public setWorld(World w)
    {
        this.myWorld = w;
    }

    public void removeselffromlist()
    {
        //code i dont know
        myWorld.removeEntity(this);
    }
}

如果我正在做这样的事情,我会在Entity课程中移动World个对象的所有创建,所有权和管理。