繁体   English   中英

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

[英]Java- Creating Consistency Between Two Variable in Separate Classes

我有三个类-用户,发言权和目录。

目录包含/创建多个静态Floor对象。

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

每个楼层,以及其他信息,都需要知道什么是用户。

我想做这样的事情:

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)....
  }

}

使用这样的User类:

public class User{

  private Floor floor;

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

     ....(other User methods)....
}

问题:我想确保由我的用户和楼层对象保存的信息始终彼此一致,以便所有用户都知道他们所在的楼层,所有楼层都知道用户所在的楼层。 为此,设置员需要互相呼叫。 如何在不创建无限循环的情况下执行此操作? 这似乎是一个足够普遍的问题,我认为它具有标准格式,但我不知道它是什么。

一种选择是拥有一个单独的类来表示用户的位置-楼层和用户之间的关系

该类可以是Directory本身,也可以是Directory持有其实例的新类。

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 ) { ... }

    ...
}

上面的集合要求在Floor和User上定义equals()hashCode() 或者,您可以使用楼层ID和用户ID。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM