【问题标题】:Removing a java class fom a list从列表中删除 java 类
【发布时间】:2011-10-09 20:16:04
【问题描述】:

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

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

编辑:不会有多个世界

【问题讨论】:

    标签: java class list


    【解决方案1】:

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

    public class World {
        List<Entity> entities;
    
        public void removeItem(Entity entity) {
            entities.remove(entity);
        }
    }
    
    public class Entity{
        public void removeSelfFromList() {
            world.removeItem(this);
        }
    }
    

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

    【讨论】:

      【解决方案2】:

      为了能够将自己从列表中删除,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);
        }
      }
      

      【讨论】:

      • 不会有多个世界
      【解决方案3】:

      虽然我质疑这整个方法(不知道为什么需要这样做的具体原因),但答案是 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 类中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-07
        • 2019-10-03
        • 1970-01-01
        相关资源
        最近更新 更多