【发布时间】:2013-04-22 11:35:40
【问题描述】:
今天想了解List的超类型:
sealed abstract class List[+A] extends AbstractSeq[A]
with LinearSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
哇,List 已经有五个直接超类型了。随便挑一个吧:
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]
啊,看来我们到了某个地方,只剩下一个超类型了:
trait SeqLike[+A, +Repr] extends Any
with IterableLike[A, Repr]
with GenSeqLike[A, Repr]
with Parallelizable[A, ParSeq[A]]
此时我放弃了。这张图有多深?在所有这些超类型中,哪些在概念上是相关的,哪些只是实现细节或优化技巧?
如何理解如此庞大的继承图?
【问题讨论】:
-
嗯,首先你确保你有你的铁口粮、火炬和十英尺长的杆子,然后你下降,戳东西以确保它们不是陷阱......更严重的是,集合层次结构很大,其中大部分实际上在概念上做了一些事情。这并不容易。至少大多数类型现在在他们的文档顶部解释了它们的用途。 (在
GenTraversableOnce等内容触底之前,大约还有三到四个级别。) -
如果您只是对集合 API 的面向用户的部分感兴趣(或者作为查看内部结构之前的热身),那么这组继承图是一个好的开始:decodified.com/scala/collections-api.xml ;它不是完全最新的,但幸运的是它还没有过时。
-
@gourlaysama 这些图表不错,但我找不到
AbstractSeq、Product、GenericTraversableTemplate、LinearSeqOptimized、LinearSeqLike、SeqLike、IterableLike、GenSeqLike或Parallelizable在那里...
标签: scala inheritance collections types complexity-theory