如何编写一个方法,该方法采用在 Scala 中具有协变或逆变约束的参数?

How to write a method that takes a parameter with a covariant or contravariant bound in scala?

我正在编写一个 scala 程序,它在某些时候应该为某些任务提供一些状态更新,它也可以为任务组提供它。重点是在不同的phase中,细节是不一样的。所以实际上 Details 特征有多种实现,我没有在这里包括。

case class GroupMessage [+S <: Details]
(
  id: String,
  statuses: List[StatusMessage[S]]
) 

case class StatusMessage [+S <: Details]
(
  id: String,
  phase: Phase,
  statusDetails: S
)

sealed trait Details {
  def getDetails: List[String]
}

现在,问题是接收此状态更新的方法,我无法正确获取其签名。如果我只输入 def receiveStatus(status: StatusMessage) ,编译器会抱怨 StatusMessage 采用类型参数。我以为我需要 def receiveStatus[S :> Details](status: StatusMessage[S]) 之类的东西,但这也不能编译。

符号 :> 不存在 - 您可能打算使用 >:

但这仍然无法编译,因为您希望 S 成为 Details 的子类型(例如 SpecialDetails,而不是超类型(例如 Any) .

def receiveStatus[S <: Details](status: StatusMessage[S])