我可以使用具有泛型类型的简单泛型类型的Scala方法吗?

时间:2018-02-08 18:11:48

标签: scala generics

我想在我的对象中创建一个函数,以便在我的代码的任何部分实例化它,但我的函数必须是通用的,它接收我已经定义为泛型的参数。我的目标:

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)
}

在我的代码中:

enter image description here

我已经有了类型为:BaseElement的参数的函数,它们运行良好,但BaseModel没有,因为它们接收参数

无法识别我的函数中的BaseModel。感谢。

1 个答案:

答案 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)语法无效 - 您无法在类型上调用方法,只能调用该类型的实例。