今天想了解List
的父类(super class)型:
sealed abstract class List[+A] extends AbstractSeq[A]
with LinearSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
哇,原来如此
List
已经有五个直接父类(super class)型。让我们随机选择一个:trait LinearSeq[+A] extends Seq[A]
with scala.collection.LinearSeq[A]
with GenericTraversableTemplate[A, LinearSeq]
with LinearSeqLike[A, LinearSeq[A]]
好的,让我们选择名称最相似的一个:
trait LinearSeqLike[+A, +Repr <: LinearSeqLike[A, Repr]] extends SeqLike[A, Repr]
啊,看来我们到了某个地方,只剩下一个父类(super class)型:
trait SeqLike[+A, +Repr] extends Any
with IterableLike[A, Repr]
with GenSeqLike[A, Repr]
with Parallelizable[A, ParSeq[A]]
此时我放弃了。这个图有多深?所有这些父类(super class)型中,哪些在概念上是相关的,哪些只是实现细节或优化技巧?
如何理解如此庞大的继承图?
最佳答案
大多数 parent 确实是实现细节和优化技巧。如果你不关心它,你可以忽略任何东西 Like
或 Template
在末尾。将其应用于列表,我们有:List <: LinearSeq <: Seq <: Iterable <: Traversable
.您应该在代码中使用这些特征作为参数类型(而不是实现特征)。它们的描述在:Scala Collections API
如果您想了解如何使用实现特征,或设计您自己的集合,您应该阅读本教程:The Architecture of Scala Collections .
此外,如果您想/需要知道给定方法的实际实现位置,请单击 scaladoc 中的方法签名以展开描述。定义类字段显示指向实现位置的链接。
关于scala - 迷失在 Scala 集合的继承图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267869/