任何人都可以解释为什么我在我的特征中声明TableQuery时会出现以下编译器异常。
class type required but T found
T实际上不是Class类型,还是我错了?
trait TableModel[T <: Table[_]] {
val table: TableQuery[T] = TableQuery[T] <~~~~~~~~~~ class type required but T found
def exists(implicit session: Session): Boolean =
(!MTable.getTables(table.baseTableRow.tableName).list.isEmpty)
def schemaDescription: MySQLDriver.SchemaDescription = table.ddl
def create(implicit session: Session): Unit = schemaDescription.create
def drop(implicit session: Session): Unit = schemaDescription.drop
}
object UsersTable extends TableModel[Users] {}
答案 0 :(得分:1)
您收到此错误消息的原因是值位置TableQuery[T]
实际为TableQuery.apply[T]
,这是一个扩展为new TableQuery(new T(_))
的宏。仅从类型约束T <: Table[_]
可以确定T
是一个非抽象类,您可以在{公共构造函数)上调用new
。 scalac给出的实际错误消息在这里不是很精确,但在右边的球场。
答案 1 :(得分:0)
您需要定义抽象的TableQuery引用而不是具体的。
trait TableModel[T <: Table[_]] {
val table: TableQuery[T]
def exists(implicit session: Session): Boolean =
(!MTable.getTables(table.baseTableRow.tableName).list.isEmpty)
def schemaDescription: MySQLDriver.SchemaDescription = table.ddl
def create(implicit session: Session): Unit = schemaDescription.create
def drop(implicit session: Session): Unit = schemaDescription.drop
}
object UsersTable extends TableModel[Users] {
val table = TableQuery[Users]
}