2

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] 位置在哪里?

4

2 回答 2

4

这正是它所说的(scala.collection.AbstractSeq)。但是,它是一个包私有类,这可能就是它没有出现在 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]
于 2013-11-08T14:43:59.567 回答
1

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

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

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

于 2013-11-08T15:51:16.690 回答