我与此一起使用番石榴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/

10-16 08:02