2012-11-23 13 views
16

La mia app java ha una cache e vorrei scambiare l'implementazione della cache corrente e sostituirla con la cache di guava.utilizzando la cache di guava senza una funzione di caricamento

Sfortunatamente, l'utilizzo della cache della mia app non sembra corrispondere al modo in cui le cache di guava sembrano funzionare. Tutto ciò che voglio è essere in grado di creare una cache vuota, leggere un elemento dalla cache usando un metodo "get" e memorizzare un elemento nella cache con un metodo "put". NON voglio che la chiamata "get" stia cercando di aggiungere un elemento alla cache.

Sembra che la classe LoadingCache disponga dei metodi get e put di cui ho bisogno. Ma ho difficoltà a capire come creare la cache senza fornire una funzione di "caricamento".

Il mio primo tentativo è stato questo:

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

Ma che causa questo errore di compilazione: tipi incompatibili; nessuna istanza (s) di tipo variabile (s) K1, V1 esiste in modo che la cache sia conforme a LoadingCache

Apparentemente devo passare in un CacheLoader che ha un metodo di "caricamento".

(Credo che avrei potuto creare un CacheLoader che ha un metodo "carico" che solo genera un'eccezione, ma che sembra un po 'strano e inefficiente. E' questa la cosa giusta da fare?)

+0

Sarei tentato di dire che (da quali informazioni hai postato), non sembra molto simile a una cache invece di essere semplicemente una mappa. –

+2

@Sean Parsons: IMHO la differenza più importante tra cache e mappa è che il primo può dimenticare le cose in qualsiasi momento. Il caricamento è una funzionalità aggiuntiva. – maaartinus

+0

Stavo cercando di chiarire ulteriormente se fosse effettivamente un cache. –

risposta

22

CacheBuilder.build() restituisce un cache non caricata. Proprio quello che vuoi Basta usare

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

Per me mostra errore di compilazione. non può convertire da a generico. Sto usando questa libreria per Android. – CreativeManix

+1

@CreativeManix È necessario utilizzare la classe cache non LoadingCache. – Zai

+0

Grazie a @Zai l'ho capito. – CreativeManix

Problemi correlati