我在Scala项目中工作,在编写和编译Scala代码之后,我在目标文件夹中看到了几个类文件.我很想知道它为什么会创建太多的类文件?有什么具体原因吗?
Scala编译器肯定会创建许多额外的模块,以使其成为jvm表示的方式.例如,在版本2.11中,它创建:
.class每个lambda表达式的A..class和每个object和package object.class为每个trait实现的方法.class每个专业化的A ,例如
class Foo[@specialized(Long, Double) A, @specialized(Long, Double) B]
Run Code Online (Sandbox Code Playgroud)
它将为所有(Long, Double, AnyRef)x (Long Double, AnyRef)组合创建3*3 = 9个不同的类.
但这些问题肯定是在解决这些问题.
jdk 8由于SAMlambda表示和接口默认方法,Scala 2.12在交换要求时会丢弃1和3开销.
Dotty的Linker具有自动专业化功能,它只会为您的代码生成所需的专业化,并且可以大大减少4的麻烦.