我在此使用Guava 17.0
private static final ConcurrentMap<String, Buffered> imageMap =
new MapMaker().softValues().makeMap();
刚刚更新为Guava 27,发现softValues()
已移至CacheBuilder
这样我就可以
CacheBuilder.newBuilder().softValues()
但是没有makeMap()
方法,所以我要替换为什么。
答案 0 :(得分:3)
已弃用
MapMaker
上与缓存相关的所有方法CacheBuilder
中的类似方法,并计划在不久的将来 删除。 (...)大多数
MapMaker
用例应迁移到CacheBuilder
或AtomicLongMap
。具体来说,使用MapMaker构建 具有AtomicLong
值的地图通常应迁移到AtomicLongMap
。 MapMaker缓存功能为 已使用(包括对MapMaker.makeComputingMap(Function)
的所有使用) 应该迁移到CacheBuilder
。
问题是:您真的需要使用ConcurrentMap
界面吗?如果是,请使用asMap()
视图,该视图用于非计算地图应具有相同的功能:
以线程安全映射的形式返回此高速缓存中存储的条目的视图。对地图的修改会直接影响缓存。
在您的情况下,这将是:
private static final Cache<String, Buffered> IMAGE_CACHE = CacheBuilder.newBuilder()
.softValues()
.build();
然后使用CACHE.asMap()
或将.asMap()
与带有显式类型参数的字段一起使用:
private static final ConcurrentMap<String, Buffered> IMAGE_MAP =
CacheBuilder.newBuilder()
.softValues()
.<String, Buffered>build()
.asMap();