我已經爲使用谷歌集合構建緩存下面的代碼:在斯卡拉
val cache = new MapMaker().softValues().expiration(30,
TimeUnit.DAYS).makeComputingMap(
new com.google.common.base.Function[String,Int] {
def apply(key:String):Int ={
1
}
})
而且我收到以下錯誤消息:
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] {
^
我很奇怪,爲什麼類型不匹配?
實際的代碼是:
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)
}
親切的問候, 阿里
PS - 我使用谷歌的集合V1
不行的,現在我得到這個錯誤:需要 類的類型,但com.google.common.base.Function [_,_]發現 新com.google.common.base.Function [ _,_] 我也試過-explaintypes,其實輸出真的很難理解: java.lang.Object與com.google.common.base.Function [_,_]
2010-01-29 13:54:59
@Ali:你似乎只是嘗試了第一個建議。我現在粘貼了第二個建議的完整代碼。另外,請將'-explaintypes'的輸出添加到您的問題中。 – 2010-01-29 14:06:14
其實輸出很大,我添加了實際的代碼,其中一個可以複製粘貼來重現錯誤消息。請讓我知道,如果有什麼我會提供。 – 2010-01-29 16:16:19