【发布时间】:2011-10-09 20:16:04
【问题描述】:
我有一个包含许多课程的列表,并且在每个课程中我都想知道一种允许我像这样删除自己的方法:
public class World{
List<Entity> Entities;
}
public class Entity{
public void removeselffromlist()
{
//code i dont know
}
}
编辑:不会有多个世界
【问题讨论】:
我有一个包含许多课程的列表,并且在每个课程中我都想知道一种允许我像这样删除自己的方法:
public class World{
List<Entity> Entities;
}
public class Entity{
public void removeselffromlist()
{
//code i dont know
}
}
编辑:不会有多个世界
【问题讨论】:
您必须将列表提供给其他班级。一种可能的解决方案是:
public class World {
List<Entity> entities;
public void removeItem(Entity entity) {
entities.remove(entity);
}
}
public class Entity{
public void removeSelfFromList() {
world.removeItem(this);
}
}
请注意,您需要在某处有一个“世界”对象。
【讨论】:
为了能够将自己从列表中删除,Entity 类需要对其进行引用。实现此目的的一种方法是通过World 类上的公共方法控制列表的添加/删除;例如
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);
}
}
【讨论】:
虽然我质疑这整个方法(不知道为什么需要这样做的具体原因),但答案是 Entity 类至少需要访问一个World 实例,如果不是 @ 987654323@直接列出。请注意,您应该使用 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 类中。
【讨论】: