Java—在单独的类中创建两个变量之间的一致性

Java—在单独的类中创建两个变量之间的一致性,java,standards,infinite-loop,setter,Java,Standards,Infinite Loop,Setter,我有三个类-User、Floor和Directory 目录保存/创建多个静态楼板对象 每个用户对象以及其他信息都需要知道它们所在的楼层 每一层,连同其他信息,都需要知道用户是他们中的一员 我想这样做: public class Directory{ public static Floor floor1 = new Floor(3); public static Floor floor2 = new Floor(3); class Floor{ private User

我有三个类-User、Floor和Directory

目录保存/创建多个静态楼板对象

每个用户对象以及其他信息都需要知道它们所在的楼层

每一层,连同其他信息,都需要知道用户是他们中的一员

我想这样做:

public class Directory{

  public static Floor floor1 = new Floor(3);
  public static Floor floor2 = new Floor(3);

  class Floor{

     private User[] users;

     private Floor(int allowedUsers){
        users = users[4];
     }

     public boolean addUser(User toAdd){
        // if there is a free slot on floor, add User
        for(int i = 0; i < users.length; i++){
           if(users[i] == null){
              users[i] = toAdd;
              return true;
           }
        }
        return false;
     }
           ....(other Floor methods)....
  }

}
public class User{

  private Floor floor;

  public boolean setFloor(Floor floor){
     // some code here
     // returns true if floor successfully added
  }

     ....(other User methods)....
}
问题是:
我希望确保我的用户和楼层对象所持有的信息始终彼此一致,以便所有用户都知道他们所在的楼层,所有楼层都知道他们所在的楼层。要做到这一点,设定者需要互相打电话。如何在不创建无限循环的情况下执行此操作?这似乎是一个非常常见的问题,我假设它有一个标准格式,但我不知道它是什么。

一个选项是使用一个单独的类来表示用户的位置——楼层和用户之间的关系

该类可以是
目录
本身,也可以是一个新类,该目录包含一个实例

public class LocationMap {
    private Map<Floor,Set<User>> = new HashMap<>(); 
    private Map<User,Floor> = new HashMap<>();

    public @CheckForNull Floor getFloorOf( @Nonnull User user ) { ... }

    public @CheckForNull Set<User> getUsersOn( @Nonnull Floor floor ) { ... }

    ...
}
公共类位置图{
私有映射=新的HashMap();
私有映射=新的HashMap();
public@CheckForNull Floor getFloorOf(@Nonnull User){…}
public@CheckForNull集getUsersOn(@Nonnull Floor){…}
...
}
上述集合要求在地板和用户上定义
equals()
hashCode()
。或者,您可以使用楼层ID和用户ID

如有必要,楼层和用户可以共享对LocationMap的引用。或者,如果只有这些类外部的代码需要定位用户,它可以直接通过LocationMap定位