返回LinkedHashMap <k,v>的方法的签名

时间:2017-03-09 15:28:11

标签: java collections interface

考虑我希望方法foo返回LinkedHashMap(数据按插入顺序排序)。原因是这个Map将由数据库填充,我希望它反映从查询返回的顺序。定义方法签名的正确方法是什么?

  1. public LinkedHashMap<String, String> foo()
  2. public Map<String, String> foo()
  3. 第一种方法的优点是可以向客户宣传地图的订购方式,而第二种则更为通用。

2 个答案:

答案 0 :(得分:1)

肯定是第二个 - 您应该更喜欢接口并隐藏实现 - 如果您将来决定使用Map<String, List<Map.Entry<AB, Float>>> collect = mapWithData.entrySet() .stream() .collect(Collectors.groupingBy(abEntry-> abEntry.getKey().getB())); 的另一个实现,则不需要使用此代码更改另一个方法中的任何内容

另请注意,不允许按返回类型重载方法,因此使用常规类型似乎是合适的

答案 1 :(得分:1)

这取决于该方法将如何使用/专业化。但是,我建议第二个方法。

考虑一个场景,需要重写此方法以返回let表示排序值(即TreeMap)或未排序/无序值(HashMap)。在这种情况下,我们将无法override此方法,并且必须创建另一种方法。