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]

ソース ファイル全体で、特性自体の代わりに抽象クラスを使用して匿名クラスを構築します。明らかに、コメントは、なぜこれが行われるのかという十分な動機をすでに与えています。しかし、私にとって些細なことではありません: なぜこのトリックはファイル サイズを縮小するのでしょうか? サブクラスのサイズが影響を受けるのはなぜですか? Iterator 自体は影響を受けません。

4

1 に答える 1

7

トレイトから匿名クラスをミックスインまたは作成すると、トレイト内のすべての具体的なメソッドに対して、具体的な実装への呼び出しを転送するスタブ メソッドがクラス ファイルに入れられます。これは、すべてのクラスで何度も何度も行われます。代わりに 1 つの抽象スーパークラスを作成すると、メソッドはそこにのみ配置されます。

編集: Régis Jean-Gilles のコメントに従って投稿を変更しました。

于 2013-02-12T08:59:27.400 に答える