Как абстрагироваться от определения универсального типа в универсальном типе? - PullRequest
0 голосов
/ 06 декабря 2011

Скажем, у меня есть HashMap из HashMaps, определенный следующим образом:

hashMap = new HashMap<String, HashMap<String, Integer>>();

Как мне абстрагироваться от этого, чтобы сделать определение более ясным?

Ответы [ 4 ]

2 голосов
/ 06 декабря 2011

если вы не хотите повторять определение снова, вы можете сделать его классом, определение неясно, просто многословно ..

class HashBrowns : HashMap<String, HashMap<String, Integer>>
2 голосов
/ 06 декабря 2011

Если я правильно интерпретирую ваш вопрос, у вас есть коллекция, в которой сопоставляются объекты, и вы хотите узнать, есть ли способ сделать это, чтобы она читалась лучше.

Лучше всего, если мы определим цель для каждого изэлементы, например:

Map<String,        // ZIP code   (e.g. 6009)
    Map<String,    // Name       (e.g. John Smith)
        Integer>>  // Age        (e.g. 42)

В этом случае вы можете создать следующий класс:

class Person {
  private String name;
  private Integer age;

  // Constructor and getters etc.
}

Это упростит вашу коллекцию до:

Map<String,         // ZIP/Postal code
    List<Person>>   // List of people in this postal code.

Затем вы можете упростить его, если хотите, но это дает вам представление о том, какие шаги предпринять.Самое главное - использовать имена, которые имеют смысл.

0 голосов
/ 06 декабря 2011

Без понимания вашей конкретной ситуации лучше всего рекомендовать некоторые методы для абстрагирования от метода хранения.

Например:

public Integer getNumber(String name, String attribute)
{
    HashMap<String,Integer> subMap = hashMap.get(name);
    if (subMap != null)
    {
        return subMap.get(attribute);
    } else
    {
        return null;
    }
}

public void setNumber(String name, String attribute, Integer number)
{
    HashMap<String,Integer> subMap = hashMap.get(name);
    if (subMap == null)
    {
        subMap = new HashMap<String,Integer>();
        hashMap.put(name,subMap);
    }

    subMap.put(attribute,number);
}
0 голосов
/ 06 декабря 2011

Вы можете создать абстрактный фабричный класс. Обычно они хороши для создания абстрактных оболочек для конкретных типов в общем виде. Заводы часто также реализуются как одиночные.

...