我正在为我的几个实体编写通用缓存,使用的是Scala 2.10.1。目前,由于Scala生态系统中的选项不多,我正在使用谷歌Guava的CacheBuilder。
代码:
然而,sbt 抛出了错误:
任何想法?即使我像这样添加K<:Object:
我遇到了这个错误。
代码:
trait CachedEntity[E <: KeyedEntity[K],K] {
def lookup(id:K):E
def getElem(id:K):Option[E] = Try(elemCache.get(id)).toOption
val elemCache = CacheBuilder.newBuilder().maximumSize(10).expireAfterWrite(1,TimeUnit.MINUTES).build(
new CacheLoader[K,E] {
def load(key:K) = {
println("Looking Up key:" + key + "in Class:" + this.getClass.getName)
lookup(key)
}
}
)
}
trait LongKeyed[E<: KeyedEntity[Long],Long] extends CachedEntity[E,Long]
然而,sbt 抛出了错误:
[error] KEHCaching.scala:16: type mismatch;
[error] found : id.type (with underlying type K)
[error] required: Object with K
[error] def getElem(id:K):Option[E] = Try(elemCache.get(id)).toOption
[error] ^
[error] one error found
任何想法?即使我像这样添加K<:Object:
trait CachedEntity[E <: KeyedEntity[K],K <:Object] {
我遇到了这个错误。
[error] KEHCaching.scala:27: type arguments [E,Long] do not conform to trait CachedEntity's type parameter bounds [E <: org.squeryl.KeyedEntity[K],K <: Object]
[error] trait LongKeyed[E<: KeyedEntity[Long],Long] extends CachedEntity[E,Long]
[error] ^
[error] one error found
.
)无法编译。此外,你的代码_暗示_但并没有明确说明K
和E
是某个封闭结构中的类型参数限定。你能否纠正和完善代码片段,以便其他人可以复制和修改你的原始代码? - Randall Schulz