Вызов пользовательского конструктора при привязке карты - PullRequest
2 голосов
/ 05 января 2011

Когда список связан, я могу контролировать, как создаются экземпляры объектов (для instace вызывать конструктор с несколькими параметрами), используя настраиваемый ElementFactory в AutoPopulationList следующим образом:

public class Foo{

    private List<NestedFoo> nested = new AutoPopulatingList<NestedFoo>(new ElementFactory<NestedFoo>() {
        @Override
        public NestedFoo createElement(int index) throws ElementInstantiationException {
            return new NestedFoo(index);
        }       
    });
}

Есть ли способ сделать что-то подобное, если коллекция представляет собой карту вместо списка? Я имею в виду, когда форма отправляет что-то наподобие вложенного ['fooParam'], я хочу вызвать конструктор с помощью fooParam, когда карта 'автоматически выросла'.

Спасибо.

1 Ответ

4 голосов
/ 05 января 2011

Не знаю ни одного решения в Spring, но класс Guava * MapMaker позволяет создавать вычислительную карту:

ConcurrentMap<Key, Graph> graphs = new MapMaker()
   .concurrencyLevel(4)
   .softKeys()
   .weakValues()
   .maximumSize(10000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function<Key, Graph>() {
         public Graph apply(Key key) {
           // this is where your values are created on demand
           return createExpensiveGraph(key);
         }
       });

Ссылка:


Кстати, Apache Commons / Collections имеетаналогичная функция:

MapUtils.lazyMap(Map, Transformer)

...