Ho il seguente codice per la costruzione di una cache utilizzando collezioni Google:Implementazione di un interfaccia Java in Scala
val cache = new MapMaker().softValues().expiration(30,
TimeUnit.DAYS).makeComputingMap(
new com.google.common.base.Function[String,Int] {
def apply(key:String):Int ={
1
}
})
E io sto ottenendo il seguente messaggio di errore:
error: type mismatch;
found : java.lang.Object with
com.google.common.base.Function[java.lang.String,Int]{ ... }
required: com.google.common.base.Function[?, ?]
new com.google.common.base.Function[String,Int] {
^
Mi chiedo perché il i tipi non corrispondono?
Il codice attuale è:
import com.google.common.collect.MapMaker
trait DataCache[V] {
private val cache = new MapMaker().softValues().makeComputingMap(
new com.google.common.base.Function[String,V] {
def apply(key:String):V = null.asInstanceOf[V]
})
def get(key:String):V = cache.get(key)
}
Cordiali saluti, Ali
PS - sto usando google-collezioni v1
non funziona, ora ottengo questo errore: tipo classe richiesta ma com.google.common.base.Function [_, _] trovato nuova com.google.common.base.Function [ _, _] Ho anche provato -explaintypes, in realtà l'output è davvero difficile da comprendere: java.lang.Object con com.google.common.base.Function [_, _]
@Ali: sembra che tu abbia provato solo il primo suggerimento. Ho incollato il codice completo per il secondo suggerimento ora. Inoltre, per favore aggiungi l'output di '-explaintypes' alla tua domanda. –
In realtà l'output è abbastanza grande, ho aggiunto il codice reale che si può semplicemente copiare incollare per riprodurre il messaggio di errore. Per favore fatemi sapere se c'è qualcos'altro che fornirò. –