1

当使用 Java Flight Recorder/Mission Control 对一些 scala 代码进行基准测试时,我可以看到一堆$adapted$名称中带有 的方法。看着签名,我可以想到一些可能性。

  • 这些与 java-8 函数 lambda 相同吗?即不会产生堆分配?
  • 它们是泛型的特化(在 scala 中,还是在 java 中的模板)?
  • 还是它们是某种其他类型的优化?

我在哪里可以阅读更多关于此的信息?

4

1 回答 1

0

这是我认为的某种固定装置。Scala 编译器通常在类名中滥用 $ 并且一些 java 代码可能会失败,它可能会在创建静态对象时生成一些额外的方法、包等

object Foo {
    case class Bar()
}

val bar = new Foo.Bar().getClass().getSimpleName() shouldEqual "Foo$Bar"

所以,可能它只是由编译器或其他一些类型级魔术宏库生成的

于 2019-04-22T14:00:14.153 回答