1

在 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]

在整个源文件中,抽象类用于构造匿名类,而不是 trait 本身。显然,评论已经给出了这样做的足够动力。但对我来说不是微不足道的:为什么这个技巧会减少文件大小,为什么影响子类的大小而不是 Iterator 本身?

4

1 回答 1

7

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

编辑:根据 Régis Jean-Gilles 评论更改帖子。

于 2013-02-12T08:59:27.400 回答