Я пишу общий кэш для нескольких моих объектов в scala 2.10.1. На данный момент я использую google Guava CacheBuilder, поскольку в scala-экосистеме не так много вариантов.scala 2.10 несоответствие типа с использованием goache guava's CacheBuilder
Код:
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
Было бы лучше, если бы фрагменты кода были синтаксически правильными. Два последовательных периода ('.') в вашем коде не могут быть скомпилированы. Кроме того, ваш код _suggests_, но не дает понять, что 'K' и' E' являются параметрами типа, связанными в какой-либо закрывающей конструкции. Можете ли вы исправить и заполнить фрагменты кода, чтобы люди реплицировали и изменяли ваш исходный код? –
Извините за это. Обновлен код с помощью объявления класса. – adivis