类LocalLoadingCache
类LocalLoadingCache是类LocalCache的内部类。
类定义
class LocalCache {
static class LocalLoadingCache<K, V> extends LocalManualCache<K, V> implements LoadingCache<K, V> {
}
}
注: LocalLoadingCachejicheng继承LocalManualCache,实现LoadingCache,又没有用到AbstractLoadingCache继承,还是那个问题: 那AbstractLoadingCache写来给谁用呢?
构造函数和属性
LocalLoadingCache(CacheBuilder<? super K, ? super V> builder,
CacheLoader<? super K, V> loader) {
super(new LocalCache<K, V>(builder, checkNotNull(loader)));
}
简单委托给localcache的方法
以下方法都是将实现简单委托给localcache的同名方法:
- refresh()
- getAll()
代码典型如下:
@Override
public void refresh(K key) {
localCache.refresh(key);
}
稍作变化再委托给localcache的方法
以下方法是稍作变化再委托给localcache的方法,有些只是方法名不同而已:
- get()
具体如下:
@Override
public V get(K key) throws ExecutionException {
return localCache.getOrLoad(key);
}
@Override
public final V apply(K key) {
return getUnchecked(key);
}
getUnchecked()方法
@Override
public V getUnchecked(K key) {
try {
// 调用get()方法
return get(key);
} catch (ExecutionException e) {
// 如果抛出受查异常,就包装为 UncheckedExecutionException 再抛出去
throw new UncheckedExecutionException(e.getCause());
}
}
// UncheckedExecutionException是一个RuntimeException
public class UncheckedExecutionException extends RuntimeException {}
writeReplace()方法
@Override
Object writeReplace() {
return new LoadingSerializationProxy<K, V>(localCache);
}