我有一些遗留的Java代码,我想称之为groovy Closure。
这是Java / Groovy交叉编译器能够处理的东西吗?我怀疑它首先编译Java,但它是否通过Groovy字节码再次传递以解析所有java引用。
或者我是否需要首先将带有闭包的类编译到jar中,以便我可以从Java访问它?
答案 0 :(得分:2)
我认为这可以混合使用Java和Groovy:
Mixed Java and Groovy Applications
此示例着眼于问题 围绕一个混合的Java / Groovy 应用。这个问题只会出现 当存在相互依赖时 在您的混合语言源之间 文件。所以,如果你的系统的一部分是 例如纯Java,你不会有 这个问题。你只需要编译 系统的那一部分首先和 引用生成的类/ jar 来自系统部分的文件 那是用Groovy编写的。
答案 1 :(得分:0)
我不需要特别做任何事情,我只是按照SjB文章的建议并在Java中创建一个接口来完成这个工作的简单版本,groovy类然后实现它。
在java中:
interface decorator {
public String decorate(String in) ;
}
然后在Groovy中实现:
class GroovyDecorator implements decorator {
public String decorate(String in) {
return "foo";
}
}
然后在Java中使用它:
...
public void javaFunc(someObject someStuff, decorator d) {
// do some stuff
d.decorate("input string");
}
从groovy打来电话:
GroovyDecorator gd = new GroovyDecorator() ;
javaFunc(someStuff, gd) ;
这很好,无需进行任何特殊的编译,虽然我在一个已建立的groovy环境中工作,可能有一些我不知道的特殊配置。
请注意,.groovy文件的自动重新编译不起作用。如果我更改了GroovyDecorator,我不得不重新启动grails,这使得实现这样的东西的效果更差。