在我java编码,我经常会结束了与几个 Map<String,Map<String,foo>>Map<String,List<String>> 然后我有麻烦记住这串是其关键。我的评论的声明 //Map<capabiltyId,Map<groupId,foo>>//Map<groupId,List<capabilityId>, 但它不是最大的解决方案。如果串不是最终,我将作出新的课程 CapabilityId extends StringGroupId extends String, 但是我不能。是否有更好的办法来跟踪这件事的关键是,也许有编译器强制执行?

有帮助吗?

解决方案

代替具有CapabilityId延伸String的,CapabilityId可以包括所谓的 “ID” A String字段;那么你的Map可以被定义为Map<CapabilityId, Map<GroupId, Foo>>,你可以通过在你的重点班一getId()个人ID字段获得。

我不知道我会做我自己,但如果我这样做,这可能是我会怎么做。

您可以通过具有带id字段和abstract GenericId方法的getId()类限制杂波,并有CapabilityIdGroupId继承它。

其他提示

在包装类包裹的字符串,如果你想要的:

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。当你发现这种方式是更好地记忆和控制。你自己的类可以做任何你喜欢它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top