我有一个包含很多课程的列表,在每个课程中,我想知道一种允许我像这样删除自己的方法:
public class World{
List<Entity> Entities;
}
public class Entity{
public void removeselffromlist()
{
//code i dont know
}
}
编辑:不会有多个世界
答案 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
个对象的所有创建,所有权和管理。