编辑:我得到了几个答案,这些答案说明了我在问题中已经说过的内容。我真正感兴趣的是找到确凿的引用资料。
我正在查看或多或少遵循此模式的代码示例:
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/