【问题标题】:value === is not a member of type parameter TKey (using Squeryl)value === 不是类型参数 TKey 的成员(使用 Squeryl)
【发布时间】:2013-04-06 11:34:58
【问题描述】:

我正在尝试使用出色的 squeryl ORM 框架编写一个简单的 BaseDao 类。

但是,我在使用通用类型键时遇到了一个问题。当我尝试在我的通用 BaseDao 类中使用 '===' 运算符时出现编译错误。编译错误是:value === is not a member of type parameter TKey

我的dao类及其麻烦的方法定义为:

import org.squeryl.PrimitiveTypeMode._
import org.squeryl._

abstract class BaseDao[TKey, T <: BaseEntity[TKey]](val table: Table[T]) {

  def delete(entity: T) : Boolean = {
    table.deleteWhere(record => record.id === entity.id) //This is where I get the compile error
  }
}

BaseEntity 定义为:

abstract class BaseEntity[TKey] extends KeyedEntity[TKey]

我也在我的 Dao 类中导入 PrimitiveTypeMode... 我的第一个想法是 TKey 需要被限制为 === 运算符被限制的任何内容,但是在查看源代码时,似乎没有任何明确的限制围绕运算符,所以我有点迷茫。

操作符在这里定义在squeryl的源码中:https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/dsl/TypedExpression.scala

【问题讨论】:

  • 您在范围内是否还有其他定义了 === 的内容?例如,scalaz 有一个类型安全的 equals ===。
  • 嗨@TaylorLeese,我刚刚将BaseDao 类中的两个导入添加到问题中。通过这两个导入,我的 Dao 类的具体实现可以正常工作(即 === 运算符能够与 Int 属性和 Int 参数一起使用)

标签: scala generics squeryl


【解决方案1】:

我不认为这可以在 Squeryl 中完成。 Squeryl 不支持通用类型键 - 它使用 Java 反射来获取它们的类型,该类型在运行时被擦除,因此认为它们是 Object 类型。

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 2023-03-17
    • 2013-05-05
    • 2019-07-11
    • 2016-06-17
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多