【问题标题】:Scala AbstractSeq[A] locationScala AbstractSeq[A] 位置
【发布时间】:2013-11-08 14:34:36
【问题描述】:

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.List

 sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] 

AbstractSeq[A] 位置在哪里?

【问题讨论】:

    标签: scala collections scala-collections


    【解决方案1】:

    这正是它所说的位置 (scala.collection.AbstractSeq)。但是,它是package-private class,这可能就是它没有出现在 API 中的原因。这是它在 2.10.2 中的定义:

    /** Explicit instantiation of the `Seq` trait to reduce class file size in subclasses. */
    private[scala] abstract class AbstractSeq[+A] extends AbstractIterable[A] with Seq[A]
    

    【讨论】:

      【解决方案2】:

      除了 Swift Tomato 的回答之外,还有一点背景知识 - 没有 AbstractSeq 意味着 Scala 编译器必须为扩展 trait Seq 的每个集合类实例化 Seq 中的方法的桥接方法。需要这个编译器技巧来支持 JVM 上的多重继承。

      让所有具体集合扩展 AbstractSeq 允许具体集合像任何其他 JVM 方法一样继承这些桥接方法,因此编译器不需要在每个具体集合类中实例化桥接方法 - 那些的类文件大小具体集合减少了。

      这个类是私有的,只在scala包中可见,以避免进一步混淆人们对集合包的理解。

      【讨论】:

        猜你喜欢
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 2015-10-31
        • 2012-11-15
        • 2016-06-13
        • 2021-01-01
        • 1970-01-01
        • 2019-01-27
        相关资源
        最近更新 更多