我与此一起使用番石榴17.0
private static final ConcurrentMap<String, Buffered> imageMap =
new MapMaker().softValues().makeMap();
刚刚更新到Guava 27,发现
softValues()
已移至CacheBuilder
所以我可以做
CacheBuilder.newBuilder().softValues()
但没有
makeMap()
方法,该用什么替换。 最佳答案
参见MapMakerMigration on Wiki:
在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();
关于java - 如何从Guava 17替换Guava新的MapMaker()。softValues()。makeMap(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54307635/