Как написать метод, который принимает параметр с ковариантной или контравариантной границей в 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])
но это тоже не компилируется.
1 ответ
Символ :>
не существует - вы, вероятно, хотели использовать >:
,
Но это все равно не скомпилируется, потому что вы хотите S
быть подтипом Details
(например SpecialDetails
не супертип (например, Any
).
def receiveStatus[S <: Details](status: StatusMessage[S])