我想在我的对象中创建一个函数,以便在我的代码的任何部分实例化它,但我的函数必须是通用的,它接收我已经定义为泛型的参数。我的目标:
object GeneralService {
def getRecordsLastUpdate[
A <: BaseElemem,
E <: BaseModel[F <: BaseElemem, D <: BaseEntity[A], T <: BaseTable[A]]
](date: Timestamp): Future[Seq[A]] = E.getElementForSend(date)
}
我的BaseModel:
trait BaseModel[E <: BaseElemem, D <: BaseEntity[E], T <: BaseTable[E]] {
def getElementForSend(l: Timestamp): Future[Seq[E]] = db.run(table.filter(_.lastUpdate > l).result)
}
在我的代码中:
我已经有了类型为:BaseElement的参数的函数,它们运行良好,但BaseModel没有,因为它们接收参数
无法识别我的函数中的BaseModel。感谢。
答案 0 :(得分:2)
正确的语法是逐个指定这些泛型类型而不是另一个定义。像这样:
object GeneralService {
def getRecordsLastUpdate[
A <: BaseElemem,
F <: BaseElemem,
D <: BaseEntity[A],
T <: BaseTable[A],
E <: BaseModel[F, D, T]
](date: Timestamp): Future[Seq[A]] = E.getElementForSend(date)
}
或者,如果你真的不关心其中的某些类型,你可能会这样做,例如:
object GeneralService {
def getRecordsLastUpdate[
A <: BaseElemem,
E <: BaseModel[_, _, _]
](date: Timestamp): Future[Seq[A]] = E.getElementForSend(date)
}
此外,E.getElementForSend(date)
语法无效 - 您无法在类型上调用方法,只能调用该类型的实例。