【问题标题】:Referencing the subtype within a trait in Scala在 Scala 中引用特征中的子类型
【发布时间】:2013-06-09 15:11:42
【问题描述】:

由于 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.
}

【问题讨论】:

    标签: scala generics covariance scala-2.10 contravariance


    【解决方案1】:

    你可能想要f-bounded polymorphism。只需更改trait Command的签名即可:

    trait Command[A, C <: Command[A, C]] {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2015-05-26
      • 2011-10-14
      • 2023-04-02
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多