使用 google guava 的 CacheBuilder 的 scala 2.10 类型不匹配

2024-02-23

我正在 scala 2.10.1 中为我的一些实体编写通用缓存。目前,我正在使用 google Guava 的 CacheBuilder,因为 scala 生态系统中没有太多选择。

Code:

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

CacheBuilder 需要一个 Object/AnyRef。 您可以使用 java.lang.Long 代替 scala.Long,如下所示; Scala 将根据需要自动装箱/拆箱。

import scala.util.Try
import java.util.concurrent.TimeUnit
import java.lang.{Long => JLong}

trait KeyedEntity[K]

trait CachedEntity[E <: KeyedEntity[K], K <: AnyRef] {

  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[JLong]] extends CachedEntity[E,JLong]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 google guava 的 CacheBuilder 的 scala 2.10 类型不匹配 的相关文章

随机推荐

  • 无法解析外部依赖 org.springframework.boot:spring-boot-starter: 因为没有定义存储库

    我有一个多重构建项目 目前正在设置它 每个模块自然都有一个gradle build文件仅包含以下内容 dependencies 在主要build gradle每个模块都需要我想要的文件 但是当我做一个gradle build我收到一条错误消
  • Oracle 10g - 将查询结果写入文件

    我想运行 200 多个选择查询并将结果附加到文件中 所有查询都是相同的 唯一的区别在于日期时间变量 我没有创建例程的权限 这就是我必须创建所有查询的原因 我没有权限创建视图或另一个表来存储结果 我无权访问 PL SQL 现在我需要创建一个报
  • Nuxt,将 Vuex 存储拆分为单独的文件会出现错误:未知突变类型:登录

    我试图将我的 Nuxt Vuex 存储文件拆分为单独的文件 并且没有全部Vuex getters mutations and actions到一个巨大的文件中 这演示项目位于 Github 上 https github com dutchw
  • 欧芹表单验证 - 事件监听器

    好的 所以我已经到处寻找这个 但仍然无法让它工作 似乎没有人尝试过 但我确信它可以做到 我想在我的 Twitter 引导项目中使用 Parsley 验证插件 我已经阅读了文档 但仍在学习 JQuery 所以它超出了我的理解范围 我正在合理化
  • 猫鼬一对多

    你能解释一下如何组织猫鼬模型来创建一对多连接吗 需要单独收藏 假设我有商店和物品 store js var mongoose require mongoose module exports mongoose model Store name
  • Python查找列表中n个连续的数字

    我想知道如何查找列表中的一行中是否存在一定数量的连续数字 例如 例如 如果我正在寻找两个 1 那么 list 1 1 1 4 6 original list list true true 1 4 6 after my function ha
  • lxml cssselect 解析

    我有一个包含以下数据的文档 div class ds list b 1 b A domesticated carnivorous mammal i Canis familiaris i related to the foxes and wo
  • 得到 Y 处的多项式 X? (Python 3.10、NumPy)

    我正在尝试根据 Python 3 10 中以系数降序给出的多项式计算某个 Y 值处的所有可能的实 X 值 我希望将生成的 X 值以list 我尝试过使用roots 的功能numpy图书馆 如答案之一所示这个帖子 https stackove
  • PayPal 自适应付款 - 错误 520009 - 帐户受到限制

    如果这是一个愚蠢的问题 请提前道歉 我确实尝试四处挖掘 但找不到答案 我正在尝试设置链式支付 在沙箱环境中 但收到错误 520009 帐户受到限制 尝试了几个电子邮件地址 它们都给我这个错误 电子邮件地址未在 Paypal 中注册 但据我所
  • 等待ajax响应相同的功能

    我知道类似的问题已经发布过很多次了 但是我读过很多 但找不到我的问题的答案 我有一个等待 ajax 请求响应的函数 很多人会问为什么 好吧 我正在使用一个执行函数的 Wizard Jquery 插件onLeaveAStepFunction当
  • 如何在 GridView 文本框中放置必填字段验证器

    我有一个GridView和一些TemplateField含有的物品TextBox控制 我想在其上添加一个必填字段验证器 这是我的代码
  • 颤动导航栏

    我刚刚开始应用程序开发 正在为导航栏而苦苦挣扎 下面的那个很好 但是上面的那个不好 我想删除按钮上方的灰色空间 你能帮助我吗 Code override Widget build BuildContext context return ne
  • 在 django 中记录格式化程序

    来自Django 文档 https docs djangoproject com en 1 7 topics logging examples 这是日志记录的示例格式 formatters verbose format levelname
  • 公开自托管服务时以编程方式从配置文件中读取 WCF 行为元素

    我的 app config 中有这样的配置
  • Symfony2 计算与另一个实体相关的实体字段

    我有 2 个实体 作者和书籍 1 个作者可能有很多书 我想在表格中显示每个作者有多少本书 每个作者的数量不同 我已经看过了this https stackoverflow com questions 17665271 counting th
  • PHP usort 不会对类进行排序

    这是要排序的元素数组的示例 items array 0 gt object stdClass 8 public id gt string 110 length 3 public brand id gt string 18 length 2
  • Python print 与 Javascript console.log()

    在Python中 print 1 2 n 3 4 会打印 1 2 3 4 在 JavaScript 中 console log 1 2 n 3 4 prints 1 2 n 3 4 与上面的 Python 等效的 Javascript 语句
  • 无法打开相机连接到相机时发生错误:0

    我开始开发一个应用程序 我需要使用手机的相机 当我使用 Camera open 方法时 无论是否带有cameraId 它都会返回错误 连接到相机时发生错误 0 我的 AndroidManifest xml 是
  • 如何在html页面中以格式化的方式显示html代码[重复]

    这个问题在这里已经有答案了 我的网站是一个简单的教育网站 我想以格式化的方式在我的网页中显示 HTML 代码 就像在编辑器中一样 我的意思是 HTML 标签应该以与剩余文本等不同的颜色显示 这是来自另一个网站的代码片段 我想要我的网页的输出
  • 使用 google guava 的 CacheBuilder 的 scala 2.10 类型不匹配

    我正在 scala 2 10 1 中为我的一些实体编写通用缓存 目前 我正在使用 google Guava 的 CacheBuilder 因为 scala 生态系统中没有太多选择 Code trait CachedEntity E lt K