为什么扩展hashmap的地图助手会有用?为什么不直接使用hashmap?

use*_*087 3 java design-patterns concurrenthashmap

在我最近的工作中的一个大型java代码库中,我看到以下代码:

public class MapHelper extends HashMap<String, Object>{

    private static final long serialVersionUID = 1L;

    public MapHelper() {
        super();
    }

    public MapHelper(MapHelper mh) {
        super(mh);
    }

    public MapHelper as_dict(String key) {
        return (MapHelper)this.get(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不确定这有什么用.您是否有可以阐明上述MapHelper实用性的示例?

Rad*_*def 6

这堂课看起来确实像现在这样轻浮; 然而:

  1. 这让他们指HashMap<String, Object>MapHelper是短且保证一致性.另请参阅"C++中的typedef关键字是否存在Java等价物或方法?" .

  2. as_dict是一种执行强制转换的实用方法.他们似乎对Map包含的内容有远见.这不是做演员,因为联投只在一个地方定义的安全.误差较小.

  3. 它允许他们以后添加其他功能,而无需更新整个代码库.

  4. HashMap作为顶级类进行扩展会使泛型类型参数具体化,也就是说,它们在运行时通过反射可用.请参阅Neal Gafter的这篇博文,更详细地解释了这一功能.

所以实际上有很多但很合理的原因.

Java API中有一些这样的例子,例如: