Google guava 11.0 ライブラリで導入された loadAll メソッドの効果的な実装方法を知りたいです。
これは、 CachesExplained の例に従って拡張されたすべてのメソッドの実装をロードすることを説明する次のコードです。
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder().maximumSize(1000)
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) { // no checked exception
return getGraphFromDatabase(key);
}
public Map<Key, Graph> loadAll(Iterable<? extends K> keys) {
return getAllGraphsFromDatabase(keys);
}
}
);
private Map<Key, Graph> getAllGraphsFromDatabase(Iterable<? extends key> keys)
{
lListOfGraph = //resultset got from DB Call
for (lCount = 0; lCount < lListOfGraph.size(); lCount++)
{
lGraph = (Graph)lListOfGraph.get(lCount).get(0);
graphs.asMap().put((key , lGraph);
}
return (Map<key, Graph>) graphs;
}
ここで戻り値の型が Map である場合、エラー java.lang.ClassCastException:com.google.common.cache.LocalCache$LocalLoadingCache を java.util.Map にキャストできません (Loading Cache オブジェクトを Map 型にすることはできないという事実を認識しています)
これが LoadingCache を使用する実装の正しい方法でない場合、データを LoadingCache のコンポーネントに挿入してキャッシュとして使用できるようにする方法を教えてください。