我应该使用嵌套类来封装地图值吗?

时间:2014-04-27 10:53:57

标签: java c++ map nested-class

我有一个带有地图的类(例如hashmap)。地图值包含可能具有不同类型的不同元素。我的问题是,如果使用具有相同键的不同地图,是否更好实施;或使用嵌套类封装所有元素。

嵌套类的伪代码示例。

public class MyMap<T> {
    private class Element{
          int nElementA;
          int nElementB;
          double dbElementC;
    }

    private Map<T,Element> map = new HashMap<T,Element>();

    public int getElementA(T key) {return map.get(key).nElementA;}
    public int getElementB(T key) {return map.get(key).nElementB;}
    public double getElementC(T key) {return map.get(key).nElementC;}
}

具有多个地图的伪代码示例。

public class MyMap<T> {
    private Map<T,Integer> mapA = new HashMap<T,Integer>();
    private Map<T,Integer> mapB = new HashMap<T,Integer>();
    private Map<T,Double> mapC = new HashMap<T,Double>();

    public int getElementA(T key) {return mapA.get(key);}
    public int getElementB(T key) {return mapB.get(key);}
    public double getElementC(T key) {return mapC.get(key);}
}

我认为嵌套类(尤其是私有类)会对将来的代码维护产生负面影响。但是,如果我使用具有相同键的多个地图,我觉得我在浪费资源。我还有其他方法可以重复使用地图密钥吗?

当问题出现时我用Java编写代码,但我对C ++的解决方案也感兴趣。

2 个答案:

答案 0 :(得分:1)

这是一个设计决策,只有在理解三个元素可以在一个类下封装在一起时才使用嵌套类解决方案。考虑到&#34;高凝聚力&#34;在设计课程时

答案 1 :(得分:1)

主要区别不是获得元素,而是添加元素。 如果元素彼此相关,例如NameAgeSex,则封装更好。

然而,如果它们完全不同 - 我认为不是 - 你可以使用不同的地图。

我的建议是让课程不是私密的。 单行

map.put(Integer, new Element("John", 51, "Male"));

优于

map1.put(Integer, "John");
map2.put(Integer, 51);
map3.put(Integer, "Male");