我有一个 HashMap 需要发送到 2 个方法,每个方法可能会向其中添加条目,然后我返回 HashMap。什么是更干净的方法:
public HashMap<String, Boolean> getDataMap() {
HashMap<String, Boolean> resultMap = new HashMap<>();
gatherData1(resultMap);
gatherData2(resultMap);
return resultMap;
}
或
public HashMap<String, Boolean> getDataMap() {
HashMap<String, Boolean> resultMap = new HashMap<>();
resultMap = gatherData1(resultMap);
resultMap = gatherData2(resultMap);
return resultMap;
}
哪种方法更简洁,在第二个示例中,更明显的是这 2 种方法用于对输入进行操作并返回结果,因此它更具可读性,但也可能对某些人来说不是那么有用甚至令人困惑。我只是对正确的做事方式感兴趣,尤其是因为这会变得更加复杂,因此其他人更难以阅读和理解
答案 0 :(得分:1)
如果该方法不复制映射,而仅添加条目(或删除或更新条目),则根本不需要返回映射,因为调用方和被调用方方法对映射的引用是相同的.这不是可读性的问题,而是避免冗余重新分配的问题。如果该方法以其他方式创建了一个新副本,那么您将获得返回的新地图。
答案 1 :(得分:1)
这两个片段之间存在重大差异。第二个可以返回一个 new Map
,它可能包含也可能不包含最初在 resultMap
中的数据。
第一个只能改变输入参数,这是一个开放讨论的话题,是否允许修改输入的方法。恕我直言,他们不应该,他们应该对输入进行操作并返回输出,故事结束。
因此,我会推荐/更喜欢第二个片段,包括修改 gatherData
实现以不改变传递的地图而是返回一个新的地图。您甚至可能根本不传入 resultMap
,而只是返回一个全新的地图,并将 resultMap
和 gatherData
的返回值合并/组合为 {{ 1}} 实现。如果 getDataMap
对于某些内部逻辑实际上并不需要 gatherData
,那么这应该是实现。
如果这只是为了配置目的,并且 Map
方法非常简单,没有太多逻辑或者 gatherData
没有发生太多其他事情,那么它可能 修改输入参数即可。