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