Изменить: Я получил несколько ответов, в которых говорится то, что я уже сказал в вопросе. Что меня действительно интересует, так это найти подтверждающий справочный материал.
Я смотрю на образец кода, который более или менее следует этому шаблону:
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; }
}
Это было бы более типобезопасным, избегало бы чрезмерного обобщения очень конкретной проблемы и было бы менее подвержено ошибкам во время выполнения.
Может ли кто-нибудь указать мне на какой-либо авторитетный справочный материал, в котором указано, что вам следует избегать такого рода шаблонов? Или, наоборот, если это действительно хороший образец, дайте обоснование.