如何编写在scala中接受协变或逆变界参数的方法?

如何编写在scala中接受协变或逆变界参数的方法?,scala,traits,generic-variance,Scala,Traits,Generic Variance,我正在编写一个scala程序,它在某些时候应该为某些任务提供一些状态更新,并且它还可以为任务组提供状态更新。关键是在不同的阶段s,细节是不同的。事实上,Detailstrait有各种各样的实现,我在这里没有包括 case class GroupMessage [+S <: Details] ( id: String, statuses: List[StatusMessage[S]] ) case class StatusMessage [+S <: Details] (

我正在编写一个scala程序,它在某些时候应该为某些任务提供一些状态更新,并且它还可以为任务组提供状态更新。关键是在不同的
阶段
s,细节是不同的。事实上,
Details
trait有各种各样的实现,我在这里没有包括

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

case class GroupMessage[+S符号
:>
不存在-您可能想使用

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


def receiveStatus[是的。我很抱歉问了这么一个愚蠢的问题!也许我可以把它归咎于符号不直观而且很容易忘记…@Mahdi我以前也犯过同样的错误:)@Mahdi-我以前也犯过同样的错误。请记住冒号总是类型名称前的最后一个字符。
def receiveStatus[S <: Details](status: StatusMessage[S])