>>72 じゃないけど、
派生型がアリならこんなとこか
Scalaなら派生型ナシでもっと短く書けるし、静的言語ならどうという例には向いてないんじゃないかコレ

import java.util.*;

public class Test1 {
 abstract class MapBase<K,V> extends HashMap<K,V> {
  abstract V make();
  V prepare(K k){
   V v = get(k);
   if( v== null ) put(k,v = make());
   return v;
  }
 }
 class M extends MapBase<String,List<String>>{
  @Override List<String> make() { return new ArrayList<String>(); }
 }
 class MM extends MapBase<String,M>{
  @Override M make() { return new M(); }
 }
 void foo(){
  new MM().prepare("a").prepare("b").add("111");
 }
}