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