Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法将Groovy自动转换为Java?_Java_Plugins_Groovy_Code Translation - Fatal编程技术网

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

有没有办法将Groovy自动转换为Java?,java,plugins,groovy,code-translation,Java,Plugins,Groovy,Code Translation,我继承了大量Groovy代码,我发现由于以下几个原因很难维护: 通常很难判断变量的类型 推论:很容易用不同的类型修改变量,并且不知道它 在运行时之前,许多错误都会被发现(如果单元测试没有涵盖几乎所有的内容,这会很可怕) 参数的类型基本上被忽略 我使用的IDE(STS Pro)很有用,但远远落后于Java。例如,重构就是不可用 建议有时可用,有时不可用 虽然我欣赏语言的紧凑性,但维护一直很困难和麻烦 我曾尝试手动将一些片段转换为Java,这是一种痛苦。您知道有什么工具或插件可以帮助您进行这种转换吗

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

  • 通常很难判断变量的类型
  • 推论:很容易用不同的类型修改变量,并且不知道它
  • 在运行时之前,许多错误都会被发现(如果单元测试没有涵盖几乎所有的内容,这会很可怕)
  • 参数的类型基本上被忽略
  • 我使用的IDE(STS Pro)很有用,但远远落后于Java。例如,重构就是不可用
  • 建议有时可用,有时不可用
  • 虽然我欣赏语言的紧凑性,但维护一直很困难和麻烦


    我曾尝试手动将一些片段转换为Java,这是一种痛苦。您知道有什么工具或插件可以帮助您进行这种转换吗?

    可能不是您想要听到的答案,但我将重点关注如何更好地使用Groovy,而不是尝试将代码转换为Java。在Groovy中可以做的很多事情都不能很好地转换为Java(比如)。任何到Java的自动转换都会使代码的可读性大大降低,更难理解


    如果不能说服您坚持使用Groovy,而您必须迁移到Java,那么最好的办法就是手工操作。

    一年前有一个问题。在经历了一两个月的狂喜之后,现实世界变得很脆弱。即使Greclipse2.0也不能减轻痛苦,代码变得难以管理和痛苦。
    对你的问题的简短回答-不。没有真正好的工具来做到这一点。我用SpringJDBCTemplate替换GSql,用回调替换闭包。所有这些都需要人工决定替换策略,所以如果你想得到一个好的代码,你需要进行内部管理。否则,您可能会使用一些java反编译器,但我认为这不是您真正想要的。

    我的首要技巧是编写大量的单元测试

    这一建议适用于大多数动态语言,因为编译器的静态类型检查会减少“安全网”。您需要添加测试来检查输入和输出值是否具有正确的类型等


    我认为这将解决您的大多数问题。

    我使用Groovy++找到了另一种解决方案。它几乎具有Groovy的所有优点,但具有来自Java的性能和强类型。此外,它是基于Groovy的,因此显然您只需要添加一个jar文件,并在代码顶部添加“@Typed”注释

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

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

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

    非常支持Groovy代码的重构。 它还有一个来自Groovy->Java的源代码级转换器。大多数情况下,它会生成不可编译的代码,但它可能会帮助您开始转换代码的过程。 Groovy代码:

    class HelloWorld {
    def name
    def greet() { "Hello ${name}" }
    int add(int a, int b) {
        return a+b;
    }
    }
    
    转换的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;
    }
    

    我们将把大约1000个Groovy类更改为Java8

    • 自动:我认为与手动步骤相结合是可能的
    迁移的可能步骤

    • def变量:在IDE中手动替换为正确的类名

    • def Methodes:在IDE中手动替换为正确的类名作为返回值

    • 文件重命名:自动将所有.groovy文件替换为.java文件(java 8)

    • clousures:手动替换为Java8Lambdas和Java8Streams

    • Groovy Overwriten方法:手动替换为较新的Java jdk Klass,即新文件io、新日期API或包含Apache库

    使用单元测试来控制重构

    附言:我们是usw。使用Groovy插件的Eclipse


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

    对于有类似问题的人,您可以查看GMavenPlus,仅供参考。操作参考(STS Pro)的IDE是SpringSource工具套件。一个内置GroovyEclipse插件的特定于Spring的Eclipse版本,通常比普通Eclipse的版本稍早一点。谢谢你的信息。在STS Pro上快速的谷歌搜索没有发现任何东西。你看,我想我刚刚完成了爱上语言、买书、尽可能多地学习等等的循环。然后,正如我所说的,我再次确认了Groovy的问题:它们给了您很大的自由,因此编写凌乱的代码比不写代码更容易。Java还允许您编写凌乱的代码,但它更难。即使您继承或弄乱了Java代码,重构也要容易得多。Groovy有很好的想法,但是它在类型方面非常弱。我期待着有一天学习Groovy++。。。我听说它修复了Groovy(我们拭目以待)。Groovy++没有“修复”Groovy,因为它没有损坏,它应该是动态类型的,因为Java 8的lamdas闭包不再是Groovy的优势。尽管我不太喜欢动态语言,但我不同意在一般上下文中“代码变得难以管理和痛苦”。如果有人让代码变得难以管理和痛苦,代码就会变得难以管理和痛苦。@Martinho Fernandes,是你,奥皮尼