题
在我java编码,我经常会结束了与几个 Map<String,Map<String,foo>>
或 Map<String,List<String>>
然后我有麻烦记住这串是其关键。我的评论的声明 //Map<capabiltyId,Map<groupId,foo>>
或 //Map<groupId,List<capabilityId>
, 但它不是最大的解决方案。如果串不是最终,我将作出新的课程 CapabilityId extends String
和 GroupId extends String
, 但是我不能。是否有更好的办法来跟踪这件事的关键是,也许有编译器强制执行?
解决方案
代替具有CapabilityId
延伸String
的,CapabilityId
可以包括所谓的 “ID” A String
字段;那么你的Map
可以被定义为Map<CapabilityId, Map<GroupId, Foo>>
,你可以通过在你的重点班一getId()
个人ID字段获得。
我不知道我会做我自己,但如果我这样做,这可能是我会怎么做。
您可以通过具有带id字段和abstract GenericId
方法的getId()
类限制杂波,并有CapabilityId
和GroupId
继承它。
其他提示
在包装类包裹的字符串,如果你想要的:
class GroupId implements Comparable {
private String groupId;
public GroupId (String groupId) {
this.groupId = groupId;
}
...
}
Map<GroupId, List<CapabilityId>> m = ...
创建ID
类,那么可以继承,并且它由一个String
字段和使用该字段equals()
和hashCode()
的实施方式。
我把它们都放在一个类,并利用合理的现场/方法/参数名的。
public class GroupCapabilities {
private Map<String, Map<String, Group>> groupCapabilities;
public void addGroup(String capabilityId, Group group) {
Map<String, Group> groups = groupCapabilities.get(capabilityId);
if (groups = null) {
groups = new HashMap<String, Group>();
groupCapabilities.put(capabilityId, group);
}
groups.put(group.getId(), group);
}
public Map<String, Group> getGroups(String capabilityId) {
return groupCapabilities.get(capabilityId);
}
public Group getGroup(String capabilityId, String groupId) {
Map<String, Group> groups = groupCapabilities.get(capabilityId);
return (groups != null) ? groups.get(groupId) : null;
}
// Etc..
}
这样,你可以在方法/参数名是什么,它预计/回报看。
有一定数量的方式去这个人(一些已经提到):
- 作为@罗马,包裹的通用型在一个更具体的类型,这给加强打字。强打字好,海事组织。
- 作为@南大,使用一个更具体的收集型的。Java库是一个小可怜的的在这个区域。这取决于你如何感觉关于依赖关系。
- 作为@BalusC,将所有的黏糊糊的东西进入一个讨厌的类。不真的清除的问题,但它确实包含它的(像捉鬼敢死队).
Map<String,Map<String,foo>>
看起来非常像你一样有一个复合的关键,即一个关键,包括两个部分。因此,引入一个不可改变的复合的关键类,这是一个值对象,表示这两个组件的价值的对象。
相反Map<String,List<String>>
的,你应该从谷歌番石榴/谷歌收集使用Multimap之
HTTP ://google-collections.googlecode.com/svn/trunk/javadoc/index.html COM /谷歌/普通/收集/ Multimap.html
添加到其他的答案:
包裹。
这不仅是一个解决问题的方法,但一般是一个好主意,即避免简单 参数。您的代码将获得可读性,理智和可维护性。 您可以添加各种漂亮的属性给它,例如声明它@Immutable。当你发现这种方式是更好地记忆和控制。你自己的类可以做任何你喜欢它。