编辑:我已经接到了几个答案,那说什么我的问题已经说的。我真正感兴趣的是找到确凿的参考材料。Java 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; }
}
这将更加类型安全,避免过度概括一个非常具体的问题,更不易在运行时错误。
任何人都可以指向我指定,你应该避免这种模式的任何权威的参考材料?或者,如果它实际上是一个很好的模式,请给出理由。
请注意,总是有两种类型的返回列表;它不会因使用情况而异。 – RMorrisey 2010-09-30 00:34:29
你在说什么听起来很合理,因为你总是知道'doSomething'的输入是xList和yList。但是,如果你只是想批量处理返回的列表而不参考每个单独的列表,那么返回某种Map/List/Set结构确实有意义。 – Strelok 2010-09-30 00:36:45
我认为这是一个反模式,是的。 – ColinD 2010-09-30 01:09:50