我正在构建一个由多个特征组成的类,其中一个特征提供了包含该类“成员”列表的功能:
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/