我正在尝试弄清楚Seq
,Iterable
,Traverable
,TraversableLike
等所有特征如何协同工作。
我正在慢慢得到一些蜘蛛网图,因为我尝试在UML类图中绘制关系。
例如scala.collection.immutable.Seq
是否继承scala.collection.generic.GenericTraversableTemplate
,即使它从其父scala.collection.immutable.Iterable
继承该特征,是否有理由?
集合API似乎充满了重复的遗传,这让我觉得我还没有理解......
干杯, 蚂蚁
答案 0 :(得分:3)
trait Seq [+A] extends Iterable[A] with Seq[A] with GenericTraversableTemplate[A,
的 SEQ 强> ] with SeqLike[A, Seq[A]] with Parallelizable[A, ParSeq[A]]
trait Iterable [+A] extends Traversable[A] with Iterable[A] with GenericTraversableTemplate[A,
的可迭代强> ] with IterableLike[A, Iterable[A]] with Parallelizable[A, ParIterable[A]]
如您所见,Seq
和Traversable
实际上使用不同的类型参数扩展GenericTraversableTemplate
,因此,例如,方法flatten
在每种情况下都有适当的返回类型