package de.invesdwin.util.collections.loadingcache.guava.internal; import java.util.Collection; import java.util.Map; import java.util.Set; import javax.annotation.concurrent.ThreadSafe; import com.google.common.cache.LoadingCache; /** * Because LoadingCache.asMap() does not load values, this acts as a workaround. */ @ThreadSafe public class WrapperLoadingCacheMap<K, V> implements Map<K, V> { private final LoadingCache<K, V> delegate; private final Map<K, V> delegateAsMap; public WrapperLoadingCacheMap(final LoadingCache<K, V> delegate) { this.delegate = delegate; this.delegateAsMap = delegate.asMap(); } @Override public int size() { return delegateAsMap.size(); } @Override public boolean isEmpty() { return delegateAsMap.isEmpty(); } @Override public boolean containsKey(final Object key) { return delegateAsMap.containsKey(key); } @Override public boolean containsValue(final Object value) { return delegateAsMap.containsValue(value); } @SuppressWarnings("unchecked") @Override public V get(final Object key) { try { return delegate.getUnchecked((K) key); } catch (final ClassCastException e) { return (V) null; } } @Override public V put(final K key, final V value) { return delegateAsMap.put(key, value); } @Override public V remove(final Object key) { return delegateAsMap.remove(key); } @Override public void putAll(final Map<? extends K, ? extends V> m) { delegateAsMap.putAll(m); } @Override public void clear() { delegateAsMap.clear(); } @Override public Set<K> keySet() { return delegateAsMap.keySet(); } @Override public Collection<V> values() { return delegateAsMap.values(); } @Override public Set<java.util.Map.Entry<K, V>> entrySet() { return delegateAsMap.entrySet(); } }