代码之家  ›  专栏  ›  技术社区  ›  Dusty

Java中本地集合的类型约定

  •  2
  • Dusty  · 技术社区  · 14 年前

    HashMap<String, Object> theMap = new HashMap<String, Object>();
    

    通常,当我看到HashMaps被使用时(我自己也使用过),局部变量只是 Map (接口),而不是绑定到具体的实现。显然,如果 地图 类型(例如接受参数)。但是,在上面这样的情况下,它是在同一点上定义和实例化的,是有只使用接口类型的根本原因,还是仅仅是样式/约定?

    4 回复  |  直到 14 年前
        1
  •  7
  •   Jon Skeet    14 年前

    (基于标题,我最初误解了这个问题,但我同时包含了类型约定和变量约定,因为它们都很有趣。)

    语义的 姓名,例如。

    Map<String, Object> nameToSessionMap = ...
    

    ... 这样,当您阅读代码时,您将知道键和值的含义。

    至于 类型 同样,我通常使用接口而不是实现,部分原因是它表明我没有使用任何特定于该类型的成员。我不想 强调 代码中的实现,通常。。。意思是当我

        2
  •  6
  •   James Van Huis    14 年前

    将对象声明为 Map HashMap . 这将允许您替换另一个 实现,而不必担心在 地图 接口。

        3
  •  1
  •   Peter Tillemans    14 年前

    一般来说,人们大多使用Map来对实现做出最少的假设。

    类名不能用于其他方法,因为HashMap只添加了clone(),而HashMap已经不再使用了(有充分的理由)。

    可能是因为这样或那样的原因,映射需要序列化,而普通映射接口并不扩展它,但是HashMap实现了它。

        4
  •  1
  •   fastcodejava    14 年前

    即使在这种情况下,它也保持通用性。对接口进行编码可确保使用 Map