【问题标题】:Generic "nested members" trait通用“嵌套成员”特征
【发布时间】:2019-06-28 16:11:37
【问题描述】:

我正在构建一个由多个特征组成的类,其中一个提供了包含该类“成员”列表的功能:

trait WithNestedMembers[T] {
  val members = new scala.collection.mutable.ListBuffer[T]
}

class MainClass extends WithNestedMembers[MainClass] {
  // ...
}

这似乎工作正常。

现在,我想在其他特征中使用“嵌套”功能:

trait NestingUser {
  this: WithNestedMembers[NestingUser] =>
  var nestedValue = 0
  def sumNested = nestedValue + members.map(_.nestedValue).sum
}

定义本身似乎可以正常工作。但是,我不能将其用作MainClass 的一部分。以下给出错误:

class MainClass extends WithNestedMembers[MainClass] with NestingUser {
  // Illegal inheritance, self-type MainClass does not conform to WithNestedMembers[NestingUser]
}

我怀疑我需要在某处使用某种类型的界限,以解释WithNestedMembers[MainClass] 足以满足WithNestedMembers[NestingUser] 的要求。但是在哪里?

【问题讨论】:

    标签: scala generics


    【解决方案1】:

    试着让T covariant+T 一样

    trait WithNestedMembers[+T] {
      val members = List.empty[T]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      相关资源
      最近更新 更多