class AbstractCache implements IDataCache<T> {

  @Override
  public void uncacheData(T data) {
    lock.writeLock().lock();
    try {
      if (entries.remove(createEntry(data))) {
        dataRemovedFromCache(data.getByteSize());
      }
    } finally {
      lock.writeLock().unlock();
    }
  }

  public  AbstractCache(S entries, IDataStorage<T> cachedStorage, long maxCacheSize,
      Predicate<T> cachingRule);

}