2012-11-23 24 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