Scala生成的字节码到Java代码的转换

Scala生成的字节码到Java代码的转换,java,scala,jvm,bytecode,decompiler,Java,Scala,Jvm,Bytecode,Decompiler,我知道Scala和Java都从各自的编译器生成字节码,这可以被JVM理解 但是我有没有办法编写Scala代码并使用Scala编译器编译它,然后生成字节码,然后使用任何Java反编译器我们可以生成相应的Java代码?反之亦然 有什么工具可以做到这一点吗?是否可以进行此转换?如果没有,你能解释一下为什么不可能吗 谢谢。Scala编译成普通的Java字节码,因此没有什么可以阻止您在其上运行常规Java反编译器。然而,Java反编译器是为反编译Java代码而优化的,因此您得到的结果可能并不漂亮。特别是,

我知道Scala和Java都从各自的编译器生成字节码,这可以被JVM理解

但是我有没有办法编写Scala代码使用Scala编译器编译它,然后生成字节码,然后使用任何Java反编译器我们可以生成相应的Java代码?反之亦然

有什么工具可以做到这一点吗?是否可以进行此转换?如果没有,你能解释一下为什么不可能吗


谢谢。

Scala编译成普通的Java字节码,因此没有什么可以阻止您在其上运行常规Java反编译器。然而,Java反编译器是为反编译Java代码而优化的,因此您得到的结果可能并不漂亮。特别是,由于明显的原因,您将看不到Scala的任何语法sugar


我不知道有任何专门的Scala反编译器。由于Scala要复杂得多,编写一个将是一件困难的事情。

Scala编译成普通的Java字节码,因此没有什么可以阻止您在其上运行常规Java反编译器。然而,Java反编译器是为反编译Java代码而优化的,因此您得到的结果可能并不漂亮。特别是,由于明显的原因,您将看不到Scala的任何语法sugar


我不知道有任何专门的Scala反编译器。由于Scala要复杂得多,编写一个将是一件困难的事情。

如果Scala使用某些不能用Java表达的特性,而只能在类文件中表达,那么您可能会运气不佳。这些特性包括:invokedynamic、非法成员名称、无构造函数……是否存在“任何工具……用于执行此任务?”的问题非常奇怪,因为您已经将任务分解为步骤,您知道用于此任务的工具。“编写Scala代码并用Scala编译器编译”,当然,您可以。只需使用Scala编译器。使用“Java反编译器”来“生成相应的Java代码”,您已经命名了该工具。结果是否令人信服,这是主观的,所以你为什么不试着判断自己呢。在我的尝试中,Java反编译器甚至没有说服我去反编译Java代码,所以我认为结果对Scala代码来说是灾难性的……如果Scala使用某些不能用Java表达的特性,而只能在类文件中表达,那么你可能就不走运了。这些特性包括:invokedynamic、非法成员名称、无构造函数……是否存在“任何工具……用于执行此任务?”的问题非常奇怪,因为您已经将任务分解为步骤,您知道用于此任务的工具。“编写Scala代码并用Scala编译器编译”,当然,您可以。只需使用Scala编译器。使用“Java反编译器”来“生成相应的Java代码”,您已经命名了该工具。结果是否令人信服,这是主观的,所以你为什么不试着判断自己呢。在我的尝试中,Java反编译器甚至没有说服我去反编译Java代码,所以我认为结果对Scala代码来说是灾难性的……作为补充说明:我正在用字节码进行一些类插装,并考虑将其应用于Groovy类文件。查看Groovy生成的字节码,我发现它是。。。一团糟。它非常复杂,充满了对合成方法和类的调用。在一个例子中,我在一个方法的末尾发现了不可访问的字节码(不知道为什么编译器会发出它)。这个字节码的反编译可能是不可理解的。查看Groovy生成的字节码,我发现它是。。。一团糟。它非常复杂,充满了对合成方法和类的调用。在一个例子中,我在一个方法的末尾发现了不可访问的字节码(不知道为什么编译器会发出它)。这个字节码的反编译可能是不可理解的。