scala - 通用 "nested members"特征

标签 scala generics

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

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]。但在哪里呢?

最佳答案

尝试制作T covariant像这样 +T

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

关于scala - 通用 "nested members"特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798632/

相关文章:

mysql - Scala Spark - For 数据帧中的循环并比较日期

reactjs - 具有通用参数/返回类型的 Typescript React 无状态函数

java - 为什么创建 Simple ImmutableMap 会导致未经检查的强制转换警告?

asp.net-mvc - viewdata 中的 ASP.NET MVC 通用列表

使用 apply 方法的泛型类型的 Scala 工厂?

postgresql - 在光滑的案例类/表定义中表示 postgres INET 类型

scala - 我可以在 Scala 中创建空的元组或字符串吗?

c# - 如何将值存储到通用类字段中 (Mono.Cecil)

scala - 在 Spark 上运行 Tika 的类路径问题

scala - 函数式 XML 拉取处理教程