Scala标准库:"显式实例化以减少子类中的类文件大小"

时间:2013-02-12 08:55:48

标签: scala abstract-class standard-library traits

在Scala标准库中,出现了几种模式“在子类中减少类文件大小的显式实例化”。例如,在Iterator.scala中:

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

在整个源文件中,抽象类用于构造匿名类而不是特征本身。很明显,评论已经给出了足够的动力,为什么要这样做。但是对我来说非常重要的是:为什么这个技巧会减小文件大小,为什么子类的大小会受影响而不是Iterator本身呢?

1 个答案:

答案 0 :(得分:5)

当您从特征中混合或创建匿名类时,对于特征中的所有具体方法,将调用转发到具体实现的存根方法放入类文件中。这将在每个类中一遍又一遍地完成。如果您改为创建一个抽象超类,那么这些方法只会放在那里。

修改:根据RégisJean-Gilles的评论更改帖子。