首页 > 解决方案 > 使用 Guava CacheBulilder() 构建扩展的 AbstractCache() 对象

问题描述

我想扩展 Guava 的AbstractCache()类(Cache 接口的一个实现)来覆盖 Cache 接口的一些内置函数。

但是,由于CacheBuilder()通常用于构建缓存并返回 Cache 类型对象,我不确定如何构建扩展类类型的缓存,因为使用 CacheBuilder 会返回父类的类型。所以会很落魄。

import com.google.common.cache.{Cache, AbstractCache, CacheBuilder}

// this works normally
Cache validCache = CacheBuilder.newBuilder.build()

// extending AbstractCache, an abstract class implementation of Cache interface
class MyCache extends AbstractCache {...}

// this doesn't work since the return value of calling build()
// is Cache, parent type of MyCache
MyCache invalidCache = CacheBuilder.newBuilder.build()

我想我遗漏了一些东西,因为 AbstractCache() 类的文档特别指出它是 Cache 接口的实现,使程序员更容易扩展他们自己的类,大概是从它构建一个缓存。

标签: inheritanceguava

解决方案


只是不要使用CacheBuilder,而是自己MyCache直接实例化你。CacheBuilder只是Cache实例的构造函数(假设您自己实现任何花哨的东西)。

作为旁注,您为什么要扩展AbstractCache?也许咖啡因就足够了?


推荐阅读