0

如何获得一个案例类的所有自动生成的方法的代码,以便在重构为常规(非案例)类时干净地保留它们中的任何一个?是否有一些编译标志可以揭示案例类的自动生成方法,或者其他方式,最终将其减少为剪切和粘贴?

我的印象是有编译标志来显示自动扩展的定义......

4

2 回答 2

1

您可以看到编译器使用-Xprint:<phase>标志对源代码进行去糖处理。对于您的示例(查看为案例类生成了哪些代码),运行:

scalac -Xprint:typer YourScala.sca

使用-Xshow-phases标志,您将看到所有可用的阶段。

但是您看到的输出不是可编译的 scala 源代码,而是一些中间表示。

于 2015-04-28T16:16:53.127 回答
0

这可能不是那么容易。

编译器生成字节码,因此无法复制编译器输出并粘贴到源代码中。

您可以通读生成的字节码并手动为类似方法重新创建 Scala 代码。这会有点费力,但方法相对简单,理解字节码是一件好事。

如果某处有可用的 Scala 反编译器,那么反编译已编译的案例类将显示您想要的代码。

鉴于方法依赖于案例类的字段,它们不太可能在编译器实现中可用,因为任何可以复制和粘贴的东西。

也许最好的办法是查看语言规范并实现案例类所描述的方法。

于 2015-04-25T08:21:41.430 回答