Scala - AbstractSeq 如何减少字节码大小

Fai*_*lde 3 java scala bytecode

我正在浏览 scaladocs 并遇到了AbstractSeqclass。他们将其描述为

Explicit instantiation of the Seq trait to reduce class file size in subclasses.

这如何减少子类的文件大小?子类无论如何都会获得所有方法,对吗?有人可以解释这是如何工作的吗

Ale*_*nov 5

当您直接扩展特征时,该类会为每个方法获取一个方法,并在特征中实现。

因此,假设您有N实现的方法Seq(并且特征Seq本身扩展了)。如果您有M扩展的类Seq,它们需要M*N方法。当它们扩展时AbstractSeq,方法和所有其他类AbstractSeq都会继承它们。N因此,您需要用 1 个额外的类来换取(M-1)*N更少的方法。