有没有办法自动将Groovy转换为Java?

lui*_*ado 23 java groovy plugins code-translation

我继承了大量的Groovy代码,并且由于以下几个原因我发现很难维护:

  1. 通常很难说变量的类型是什么.
  2. 推论:可以很容易地修改具有不同类型的变量,而不是意识到它.
  3. 在运行期之前会发现许多错误(如果您的单元测试几乎不包括所有内容,那就太可怕了).
  4. 基本上忽略了参数的类型.
  5. 我正在使用的IDE(STS Pro)很有用,但远远落后于Java.例如,重构是不可用的.
  6. 建议有时可用,有些则不是.

虽然我很欣赏这种语言的紧凑性,但维护工作既困难又繁琐.

我试图手动将一些部分转换为Java,这很痛苦.您是否了解有助于此转换的任何工具或插件?

小智 25

IntelliJ IDEA对重构groovy代码提供了相当不错的支持.它还有一个来自Groovy的源代码级转换器 - > Java.大多数情况下它会生成无法编译的代码,但它可能有助于您开始转换代码的过程.Groovy代码:

class HelloWorld {
def name
def greet() { "Hello ${name}" }
int add(int a, int b) {
    return a+b;
}
}
Run Code Online (Sandbox Code Playgroud)

转换的Java代码:

public class HelloWorld {
public GString greet() {
    return "Hello " + String.valueOf(name);
}

public int add(int a, int b) {
    return a + b;
}

public Object getName() {
    return name;
}

public void setName(Object name) {
    this.name = name;
}

private Object name;
}
Run Code Online (Sandbox Code Playgroud)

  • 打开Groovy文件,执行"重构" - >"转换为Java" (9认同)

dby*_*rne 14

可能不是你想听到的答案,但我会专注于使用Groovy变得更加舒服,而不是试图将代码转换为Java.你可以在Groovy中做很多事情,这些事情根本不能很好地转换为Java(比如闭包).任何自动转换为Java都会使代码的可读性降低,难以理解.

如果你不能被说服坚持Groovy,并且你必须迁移到Java,你最好的选择是手工完成.

  • 你知道,我认为我刚刚完成了爱上语言,购买书籍,尽可能多地学习等等的循环.然后,正如我所说,我再次确认了Groovy的问题:它们给了你很多自由,因此编写凌乱的代码比编写凌乱的代码更容易*.Java也允许你编写凌乱的代码,但它更难.即使你继承或搞乱了Java代码,重构也会变得容易多了.Groovy有很棒的想法,但它的类型非常弱.我希望有一天能学习Groovy ++ ......我听说它修复了Groovy(我们会看到). (2认同)
  • 由于 Java 8 的 lamdas 闭包不再是 groovy 的优势。 (2认同)

Kid*_*rla 5

Groovy 和 Java 语言都编译为相同的字节码(Java 平台字节码)。所以只需 (a) 将您的 .groovy 文件编译为 .class 文件;(b) 使用 JDGUI 等反编译器将您的 .class 文件反编译为 .java 文件。


lui*_*ado 3

我找到了替代解决方案,使用 Groovy++。它几乎具有 Groovy 的所有优点,而且具有 Java 的性能和强类型。此外,它是基于 Groovy 的,所以显然你只需要添加一个 jar 文件,以及代码顶部的“@Typed”注释。

此外,它还添加了新功能,例如“GrUnit”,并允许混合动态和静态类型,我希望这将允许创建 DSL。因此它允许与现有的 Groovy 代码混合,并与 Grails 一起使用。

这个项目看起来很年轻,但确实很有前途。我已经在试水了,看看我能走多远。

所以,这个答案实际上并没有说明如何将 Groovy 转换为 Java,但您可以获得更好的东西:两个世界以及可选的第三世界的好处——没有双关语:-)——静态类型和性能。