【发布时间】:2014-09-12 11:15:43
【问题描述】:
我想要这个类型类:
abstract class Model[U](val query: TableQuery[ModelTable[U]]) {
// ...
}
但查询类型具有协方差。
我的想法是我的函数接受 U 的实例,并且需要访问相应的 TableQuery[ModelTable[U]] 的实例。 添加类型参数很讨厌,因为我不能再使用上下文边界编写函数:
def f[U : Mode](u: U) = // ...
每次都写出隐式参数非常麻烦。 至于现在,我不明白为什么这是不可能的。给定 U 的具体类型,查询的类型约束对于编译器来说应该是微不足道的。
也许更具体:为什么不能编译:
// error: Unbound Wildcard Type
abstract class Model[U](val query: _ <: TableQuery[ModelTable[U]]) {
// ...
}
【问题讨论】:
-
你能举一个类型类实例的例子吗?我不确定我是否理解您想要实现的目标。
-
这或多或少是您想要的吗?抽象类 Model[U, T <: tablequery query: t ... class modeltable>
-
是的,但是如上所述,额外的类型参数不是我理想的解决方案,因为现在我不能将模型实例视为类型类的实例。
标签: scala generics types covariance