0

随着 Scala 对泛型的广泛支持,实现以下循环参数边界的最佳方法是什么,其中CinCommand[A, C]是自身的子类型(即UserCommandSystemCommand)?

注意:我省略了下/上类型边界C- 正如问题所暗示的那样,我不确定如何以编译的方式表达这一点,或者我是否缺少 Scala 中专门用于解决此类循环问题的功能.

trait CommandPrerequisite[-A, +C] {
   val command: C
   def isValid(aggregate: A): Boolean
}

trait Command[A, C] {
   def prerequisites: List[CommandPrerequisite[A, C]]
}

trait SystemCommand extends Command[System, SystemCommand] {
   // System specific definitions.
}

trait UserCommand extends Command[User, UserCommand] {
   // User specific definitions.
}
4

1 回答 1

3

您可能需要f-bounded polymorphism。您需要更改的只是以下签名trait Command

trait Command[A, C <: Command[A, C]] {
于 2013-06-13T10:01:52.840 回答