code: @Override
  	public synchronized boolean free(CachedData data) {
  		@SuppressWarnings("unchecked")
  		Value value = ((Data<Value>)data).value;
  		values.remove(value);
  		Key key = null;
  		for (Map.Entry<Key,Data<Value>> e : map.entrySet())
  			if (e.getValue() == data) {
  				key = e.getKey();
  				break;
  			}
  		map.remove(key);
  		if (freer != null) freer.fire(value);
  		return true;
  	}
docs: skip checkstyle: OverloadMethodsDeclarationOrder