如何获取案例类的所有自动生成方法的代码,以便在重构为常规(非案例)类时干净地保留其中任何一个? 是否有一些编译标志可以揭示案例类自动生成的方法,或者其他方式,最终将其简化为剪切和粘贴?
我的印象是有编译标志来显示自动扩展的定义......
您可以看到编译器使用 -Xprint:<phase>
标志将源代码脱糖。对于您的示例(查看为案例类生成的代码),请运行:
scalac -Xprint:typer YourScala.sca
使用-Xshow-phases
标志,您将看到所有可用的阶段。
但是你看到的输出不是可编译的scala源代码,而是一些中间表示。
这可能并不容易。
编译器生成字节代码,因此无法复制编译器输出并粘贴到源代码中。
您可以通读生成的字节码,并手动为类似的方法重新创建 Scala 代码。这会有点费力,但方法相对简单,理解字节码是一件好事。
如果某处有一个可用的 Scala 反编译器,那么反编译编译的 case 类将显示您想要的代码。
鉴于这些方法依赖于 case 类的字段,它们不太可能在编译器实现中作为可以复制和粘贴的任何内容提供。
也许最好的办法是查看语言规范并实现案例类所描述的方法。