当列表绑定时,我可以通过以这种方式在AutoPopulatingList中使用自定义ElementFactory来控制对象的实例化方式(对于instace调用具有多个参数的构造函数):
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);
}
});
}
当集合是Map而不是List时,有没有办法做类似的事情?我的意思是当表单发送类似嵌套的['fooParam']时,我想在地图“自动生成”时用fooParam调用构造函数。
感谢。
答案 0 :(得分:4)
在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有类似的功能: