Антипаттерн 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; }
}

Это было бы более типобезопасным, избегало бы чрезмерного обобщения очень конкретной проблемы и было бы менее подвержено ошибкам во время выполнения.

Может ли кто-нибудь указать мне на какой-либо авторитетный справочный материал, в котором указано, что вам следует избегать такого рода шаблонов? Или, наоборот, если это действительно хороший образец, дайте обоснование.

5
задан RMorrisey 30 September 2010 в 12:28
поделиться