错误:expireAfterAccess(long,TimeUnit)在MapMaker中不公开;无法从外部包裹访问

时间:2015-09-15 07:12:04

标签: guava

当我将JDK升级到1.8时,我将guava从r09升级到18.0。但是有一个像标题一样的错误。

与方法MapMaker.maximumSize相同的访问限制。

任何人都知道如何解决它。

1 个答案:

答案 0 :(得分:1)

已弃用

MapMaker的缓存功能并将其移至新的com.google.common.cache包(see migration guide):

  

用于表示缓存的核心接口是Cache。可以使用CacheBuilder配置和创建内存中缓存,缓存条目由CacheLoader加载。使用CacheStats公开了有关缓存性能的统计信息。

现在MapMaker充当ConcurrentMapBuilder没有任何缓存功能,所以你应该使用CacheBuilder,例如:

Cache<Integer, String> cache = CacheBuilder.newBuilder()
    .maximumSize(10000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .build();

请注意,如果要计算值,可以将CacheLoader传递给build。此外,如果您需要Map接口进行缓存,则可以使用Cache#asMap()视图。