Scala集合库继承

3

我试图弄清楚所有特征,比如SeqIterableTraverableTraversableLike是如何协同工作的。

当我尝试在UML类图中绘制它们之间的关系时,我慢慢地得到了一个蜘蛛网图。

例如,scala.collection.immutable.Seq为什么要继承自scala.collection.generic.GenericTraversableTemplate,即使它已经从其父级scala.collection.immutable.Iterable继承了该特征?

集合API似乎充满了重复的继承,这让我觉得我可能还没有理解某些东西...

谢谢, Ant


1
请参考 https://dev59.com/N3I-5IYBdhLWcg3wsKv9#1724807 了解更多信息。 - huynhjl
1
这个页面(http://www.decodified.com/scala/collections-api.xml)有上面回答中列出的图表的副本。我更喜欢它,因为它可以搜索,并且有指向适当scaladoc页面的链接。 - Leif Wickland
1个回答

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,Iterable] with IterableLike[A, Iterable[A]] with Parallelizable[A, ParIterable[A]]

可以看到,SeqTraversable 实际上是使用不同的类型参数扩展了 GenericTraversableTemplate。例如,flatten 方法在每种情况下都有适当的返回类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接