Java Map反模式?

RMo*_*sey 5 java oop design-patterns list map

编辑:我已经得到了几个答案,说出了我在问题中已经说过的话。我真正感兴趣的是找到确凿的参考资料。


我正在看一个或多或少遵循此模式的代码示例:

Map<String, List> getListsFromTheDB() {
  Map<String, List> lists = new HashMap<String, List>();

  //each list contains a different type of object
  lists.put("xList", queryForListOfXItems());
  lists.put("yList", queryForListOfYItems());

  return lists;
}

void updateLists() {
  Map<String, List> lists = getListsFromTheDB();
  doSomethingWith(lists.get("xList"));
  doSomethingWith(lists.get("yList"));
}
Run Code Online (Sandbox Code Playgroud)

我的感觉是,这是一种反模式。编码人员应该做的是创建一个可以返回的类,如下所示:

class Result {
  private final List<X> xList;
  private final List<Y> yList;

  public Result(xList, yList) {
    this.xList = xList;
    this.yList = yList;
  }

  public List<X> getXList() { xList; }
  public List<Y> getYList() { return yList; }
}
Run Code Online (Sandbox Code Playgroud)

这将是类型安全的,避免过度概括一个非常具体的问题,并且在运行时不易出错。

谁能指出我任何权威的参考材料,这些材料指定您应避免这种模式?或者,或者,如果这实际上是一个好的模式,请给出理由。

Mat*_*nry 1

我没有任何权威材料,但我的直觉是,除非实际代码中发生了更复杂的事情,否则使用这种方式Map不会困扰我。实际上,这Result门课感觉有点矫枉过正。

  • 我想是的,有一点。再想一想,我真的宁愿只看到两个方法,getXListFromTheDB() 和 getYListFromTheDB()。 (3认同)
  • 如果您输入“xlist”而不是“xList”,编译器不会捕获您,这不会让您感到困扰吗?在我的实际代码中,这两个方法位于不同包中的不同类中。您可以通过使用常量来解决这个问题,但实际上,为什么首先要引入潜在的问题点呢? (2认同)