gpt4 book ai didi

java - 在我的情况下,CacheBuilder 可以替代 MapMaker 吗?

转载 作者:行者123 更新时间:2023-12-02 00:36:43 24 4
gpt4 key购买 nike

我需要获取慢速方法的结果slowResult()对于类 Something 的实例。单独缓存并没有什么帮助,因为实例几乎不会重复。幸运的是,我知道结果实际上只取决于一些容易获得的AttributesSomething ,所以我可以使用 Map<Attributes, Result>作为缓存,在代码中

Result fastResult(Something something) {
final Attributes attributes = attributesFor(something)
Result result = cache.get(attributes);
if (result!=null) return result;
result = something.slowResult();
cache.put(attributes, result);
return result;
}

为了限制缓存,我使用了现已弃用的方法 maximumSizeexpireAfterAccess 。弃用是因为新类 CacheBuilder来代替使用。但是,我没有找到如何将其应用到我的案例中的好方法。缓存键必须是 Attributes 的实例,但在缓存中加载 Something 的实例是需要的,并且没有简单的方法可以从 Attributes 重新创建它.

这个问题有好的解决方案吗?

最佳答案

非常有趣!我认为我们从未听说过这样的案例。

对于 11.0,您将能够执行 cache.asMap().put(),因此暂时忽略弃用警告可能没问题。我们正在考虑可能在 10.1 补丁版本中启用该功能,因为一些用户似乎也有类似的情况。

但是,在 11.0 中,我们正在讨论的另一个想法将允许您执行此操作:

Result fastResult(final Something something) {
return cache.get(
attributesFor(something),
new Callable<Result>() {
public Result call() {
return something.slowResult();
}
});
}

关于java - 在我的情况下,CacheBuilder 可以替代 MapMaker 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615961/

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