在Scala中引用trait中的子类型



随着Scala对泛型的广泛支持,实现以下循环参数边界的最佳方法是什么,其中Command[A, C]中的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.
}

您可能需要f有界多态性。您只需要更改trait Command:

的签名。
trait Command[A, C <: Command[A, C]] {

相关内容

  • 没有找到相关文章

最新更新