code: @Override
  	@SuppressWarnings("unchecked")
  	public V get(Object key) {
  		V result;
  		result = map.get(key);
  		if (result == null){
  			synchronized(structureLock){
  				if (!map.containsKey(key)){
  					try {
  						result = valueFactory.createValue((K)key);
  						map.put((K) key, result);
  					} catch (Exception e) {
  						throw new RuntimeException("Error creating or puting value for the map.", e);
  					} 
  				}else{
  					result = map.get(key);
  				}
  			}
  		}
  		return result;
  	}
docs: Get the value object corresponding to the key object specified,
  if such entry does not exist in the Map, then create one and put
  into the Map and return the value object in the newly created entry.<br>
  取得key所对应的value，如果目前在Map里没有，则在Map里新建一个并返回新建
  的这个value对象。
  
  @param key	The key object that will be used to look for the value object.