2012-11-23 29 views
16

我的Java应用程序有一个缓存,我想换出当前的缓存实现并将其替换为番石榴缓存。使用没有加载函数的番石榴高速缓存

不幸的是,我的应用程序的缓存使用似乎不符合番石榴的缓存似乎工作的方式。我想要的只是能够创建一个空的缓存,使用“get”方法从缓存中读取一个项目,并使用“put”方法将项目存储在缓存中。我不希望“get”调用尝试将项目添加到缓存中。

看来,LoadingCache类具有我需要的get和put方法。但是我无法确定如何在不提供“加载”功能的情况下创建缓存。

我第一次尝试是这样的:

LoadingCache<String, String> CACHE = CacheBuilder.newBuilder().build(); 

但导致该编译器错误:不兼容的类型;没有类型变量K1,V1的实例存在,因此Cache符合LoadingCache

显然,我必须传入一个具有“加载”方法的CacheLoader。

(我想我可能会创建一个“负载”的方法,只是抛出异常的缓存加载器,但似乎有点古怪,效率低下。那是正确的事是什么?)

+0

我会试图说(从你发布的信息),它听起来不像是一个缓存,而不仅仅是一个地图。 –

+2

@ Sean Parsons:恕我直言,Cache和Map之间更重要的区别是前者可能随时都会遗忘。加载是一个附加功能。 – maaartinus

+0

我更试图阐明它是否真的是缓存。 –

回答

22

​​3210返回非加载缓存。正是你想要的。只是使用

Cache<String, String> cache = CacheBuilder.newBuilder().build(); 
+1

对我来说,它显示编译时错误。它不能从转换为 generic。我正在使用这个lib的android。 – CreativeManix

+1

@CreativeManix你必须使用Cache类而不是LoadingCache。 – Zai

+0

谢谢@Zai我明白了。 – CreativeManix