gpt4 book ai didi

java - Google Guava 的 CacheLoader loadAll() 方法实现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:00 26 4
gpt4 key购买 nike

我很想知道 google guava 11.0 库中引入的 loadAll 方法实现的有效方式是什么。

下面是描述load all方法实现扩展的代码
根据 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 cannot be cast to java.util.Map (知道加载缓存对象不能是类型的事实 map )

如果这不是使用 LoadingCache 的正确实现方式,那么LoadingCache的Component中数据是如何注入(inject)的,从而可以作为Cache使用。

最佳答案

您的getAllGraphsFromDatabase 方法应该从底层数据存储中获取值。 LoadingCache 实现会为您处理将返回值添加到 map 中。

我认为你的加载方法应该是这样的:

private Map<Key, Graph> getAllGraphsFromDatabase(Iterable<? extends key> keys)
{
final List<Graph> lListOfGraph = //resultset got from DB Call

final Map<Key, Graph> map = new HashMap<Key, Graph>(listOfGraph.size());
for (final Graph graph : lListOfGraph)
map.put(graph.getKey(), graph);

return map;
}

关于java - Google Guava 的 CacheLoader loadAll() 方法实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com