Java Map反模式?

标签 java design-patterns list oop 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"));
}

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

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; }
}

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

任何人都可以指出任何指定您应该避免这种模式的权威引用资料吗?或者,如果它实际上是一个好的模式,请给出理由。

最佳答案

我认为关键是列表的数量是固定的。由于您确保代码使用 2 个列表,因此 map 有点过度概括。

所以我认为“class Result”更好。

关于Java Map反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3826891/

相关文章:

java - Dialog 的对象位置 Libgdx

java - 使用 iText 在所有续页中重复 PdfPTable header

java - 三路 hibernate ORM 映射 - 如何?

java - 升级到 Ubuntu 14.04 后,JRE 在 Eclipse 中崩溃

java - 单例中的双重检查锁定

Java ArrayList在for循环中越界

scala - 使用给定的部分大小列表将 Scala 列表拆分为多个部分。[分区]

database - 事件记录设计模式?

oop - OOP 好还是坏?

javascript - 如何将freemarker列表中包含特殊字符的复杂元素解析为javascript数组