docs: @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;
  	}