Как правильно построить Java Map, которая является HashMap, но конвертирует значения на входе и выходе? - PullRequest
0 голосов
/ 12 июля 2011

Мне в основном нужна слегка измененная версия HashMap, где всякий раз, когда значение читается или записывается, оно должно быть преобразовано. До сих пор я пробовал следующее:

public class MyMap implements Map<String, Object> {

    private HashMap<String, MyType> map;

    public Object get(Object key) {
        return map.get(key).getValue();
    }

    public Object put(String key, Object value) {
        return map.put(key, MyType.wrap(value)).getValue();
    }

    ... all other methods of the Map interface are handled by map
}

Я надеялся, что это все, что мне нужно было сделать, но я борюсь с этими двумя методами:

Set<Entry<String,Object>> entrySet()
Collection<Object> values()

Те, кого я не могу просто переслать на карту, так как значения должны быть преобразованы одно за другим. Конечно, я мог бы просто скопировать реализацию из HashMap и изменить ее в соответствии со своими потребностями, но это казалось довольно уродливым решением, и перед тем, как сделать это, я хотел убедиться, что я не пропускаю гораздо более приятное решение.

Есть ли лучший способ?

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

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

вот так

Class MyHashmap {

private Map map = new HashMap();

//methods for add/remove to wrap and put in HashMap
public void add(String ,Object) {
  map.put(key, MyType.wrap(value)).getValue();

}

// таким же образом вы можете добавить метод для удаления

1 голос
/ 12 июля 2011

Посмотрите на Apache Commons TransformedMap и посмотрите, соответствует ли он вашим потребностям.

0 голосов
/ 12 июля 2011

То, что вы делаете, само по себе довольно некрасиво, поэтому я бы не стал до смерти переживать из-за немного некрасивой реализации. Либо делайте то, что вы предлагаете, либо заставьте методы get / put поместить преобразованные значения в карту, а затем остальные методы будут просто обертками.

...