类LocalManualCache
类LocalManualCache是类LocalCache的内部类。
类定义
class LocalCache {
      static class LocalManualCache<K, V> implements Cache<K, V>, Serializable {}
}
注: LocalManualCache直接实现了Cache,而不是从AbstractCache继承,有些奇怪: 那AbstractCache写来给谁用呢?
构造函数
LocalLoadingCache(CacheBuilder<? super K, ? super V> builder,
    CacheLoader<? super K, V> loader) {
  super(new LocalCache<K, V>(builder, checkNotNull(loader)));
}
方法实现
简单委托给localcache的方法
以下方法都是将实现简单委托给localcache的同名方法:
- getIfPresent()
- getAllPresent()
- put()
- putAll()
- invalidateAll
- cleanUp()
代码典型如下:
@Override
@Nullable
public V getIfPresent(Object key) {
    // 直接委托给 localCache 的 getIfPresent()方法。
    return localCache.getIfPresent(key);
}
稍作变化再委托给localcache的方法
以下方法是稍作变化再委托给localcache的方法,有些只是方法名不同而已:
- get()
- invalidate()
- invalidateAll()
具体如下:
@Override
public V get(K key, final Callable<? extends V> valueLoader) throws ExecutionException {
  checkNotNull(valueLoader);
  // 委托给localCache的get(key, CacheLoader)方法
  return localCache.get(key, new CacheLoader<Object, V>() {
    @Override
    public V load(Object key) throws Exception {
      // 通过一个内部匿名类将Callable转为CacheLoader
      return valueLoader.call();
    }
  });
}
@Override
public void invalidate(Object key) {
  checkNotNull(key);
  //委托给localCache的remove方法
  localCache.remove(key);
}
@Override
public void invalidateAll() {
  localCache.clear();
}
public long size() {
  return localCache.longSize();
}
asMap()方法
@Override
public ConcurrentMap<K, V> asMap() {
  // 直接把localcache这个map返回了
  return localCache;
}
stats()方法
@Override
public CacheStats stats() {
  SimpleStatsCounter aggregator = new SimpleStatsCounter();
  // 先加上localCache的globalStatsCounter
  aggregator.incrementBy(localCache.globalStatsCounter);
  for (Segment<K, V> segment : localCache.segments) {
    // 再将各个segment的statsCounter累加起来
    aggregator.incrementBy(segment.statsCounter);
  }
  //最后得到当前的快照
  return aggregator.snapshot();
}
writeReplace()方法
Object writeReplace() {
  return new ManualSerializationProxy<K, V>(localCache);
}
TBD:再细看。