通过多种方法传递引用,哪种方法更好

时间:2021-04-16 11:17:24

标签: java

我有一个 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 种方法用于对输入进行操作并返回结果,因此它更具可读性,但也可能对某些人来说不是那么有用甚至令人困惑。我只是对正确的做事方式感兴趣,尤其是因为这会变得更加复杂,因此其他人更难以阅读和理解

2 个答案:

答案 0 :(得分:1)

如果该方法不复制映射,而仅添加条目(或删除或更新条目),则根本不需要返回映射,因为调用方和被调用方方法对映射的引用是相同的.这不是可读性的问题,而是避免冗余重新分配的问题。如果该方法以其他方式创建了一个新副本,那么您将获得返回的新地图。

答案 1 :(得分:1)

这两个片段之间存在重大差异。第二个可以返回一个 new Map,它可能包含也可能不包含最初在 resultMap 中的数据。
第一个只能改变输入参数,这是一个开放讨论的话题,是否允许修改输入的方法。恕我直言,他们不应该,他们应该对输入进行操作并返回输出,故事结束。

因此,我会推荐/更喜欢第二个片段,包括修改 gatherData 实现以不改变传递的地图而是返回一个新的地图。您甚至可能根本不传入 resultMap,而只是返回一个全新的地图,并将 resultMapgatherData 的返回值合并/组合为 {{ 1}} 实现。如果 getDataMap 对于某些内部逻辑实际上并不需要 gatherData,那么这应该是实现。

如果这只是为了配置目的,并且 Map 方法非常简单,没有太多逻辑或者 gatherData 没有发生太多其他事情,那么它可能 修改输入参数即可。

相关问题