加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

丢失在Scala收藏的继承图中

发布时间:2020-12-16 21:30:57 所属栏目:安全 来源:网络整理
导读:今天我想了解列表的超类型: sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]] 哇,所以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]]

在这一点上,我放弃了.这个图表有多深?所有这些超类型在概念上是相关的,哪些是只是实现细节或优化技巧?

如何理解这样一个巨大的遗产图?

解决方法

大多数父母确实是实现细节和优化技巧.如果你不关心它,你可以忽略任何与Like或Template结尾的任何东西.应用于列表,我们有:列表&lt ;: LinearSeq&lt ;: Seq&lt ;:Iterable<:可遍历.您应该使用这些traits作为代码中的参数类型(而不是实现traits).他们被描述在: Scala Collections API

如果您想了解如何使用实现特征,或设计自己的集合,则应阅读本教程:The Architecture of Scala Collections.

此外,如果您想/需要知道实际实现给定方法的位置,请单击scaladoc中的方法签名来展开描述. “定义类”字段显示指向实现位置的链接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读