static B getOrCreate(Map map, A key, Class extends B> c) ctex {
B b = map.get(key);
if (b == null)
map.put(key, b = c.newInstance());
ret b;
}
// f : func -> B
static B getOrCreate(Map map, A key, O f) ctex {
B b = map.get(key);
if (b == null)
map.put(key, b = (B) callF(f));
ret b;
}
static B nuLike getOrCreate(Class extends B> c, Map map, A key) {
ret getOrCreate(map, key, c);
}