我正在对这些物体进行建模:
Visitor' is a general object that has
长访客ID;
User
是Visitor
加enum UserType
加Date startedAt
Addressee
是User
加enum AddresseeType {TO, CC, BCC}
多个Addressee
个实例可能对应一个User
,因此extend
似乎不切实际。我将User
和Addressee
存储在Map<Long, T extends Visitor>
中,并通过visitorID获取对象。它有效,但在几个地图中使用了相同的Long visitorID
:每个AddresseeType
,allUsers
,allVisitors
。
在没有ID重复的情况下存储此类嵌套对象的常用方法是什么?
效率高还是有更好的方法:
class Visitor{ Long visitorID; /*some other data*/}
class User{ Visitor visitor; UserType type; /*some other data*/}
class MyModel{
Map<Long, Visitor> visitorIDtoVisitorMap;
Map<Long, User> visitorIDtoUserMap;
Map<AddresseeType, Map<Long,User>> recipientsGroupedByAddresseeTypeMap;
/* more code */
}
这些代码似乎违反了DRY原则。例如,visitorIDtoUserMap
具有相同的Long visitorID
作为键和值内的字段变量。
答案 0 :(得分:0)
请描述您要找的内容。
多个收件人实例可以对应一个用户,因此扩展似乎不切实际。
这是真的。
使用AddresseeType和Users列表创建类似电子邮件的对象可能有效。
或者Addressee有一个用户对象的引用。
每个AddresseeType,allUsers,allVisitors
我不明白你的意思。 但是因为你也可以使用多个HashMap或HashSet:
HashMap<Long, T extends Visitor> allVisitors;
HashMap<Long, T extends Visitor> allUsers;
HashSet<Long> addresseeTypeTO;
因此,如果使用了一个id,您可以轻松检查:
allVisitors.containsKey(5465456);
allUsers.containsKey(5465456);
addresseeTypeTO.contains(5465456); // getValue by using allVisitors.get(Long)
可以使用多个地图和集合,因为对象只存在一次,并且在每个地图中或只设置长值并存储对象的地址。