【发布时间】:2009-12-03 07:52:01
【问题描述】:
我有一些遗留的 Java 代码,我想在其中调用一个 groovy Closure。
这是 Java / Groovy 交叉编译器能够处理的事情吗?我怀疑它首先编译 Java,但它是否会再次通过 Groovy 字节码来解析所有 Java 引用。
或者我需要先将带有闭包的类编译成一个jar,以便我可以从Java访问它?
【问题讨论】:
标签: java groovy compilation
我有一些遗留的 Java 代码,我想在其中调用一个 groovy Closure。
这是 Java / Groovy 交叉编译器能够处理的事情吗?我怀疑它首先编译 Java,但它是否会再次通过 Groovy 字节码来解析所有 Java 引用。
或者我需要先将带有闭包的类编译成一个jar,以便我可以从Java访问它?
【问题讨论】:
标签: java groovy compilation
我看到这个是为了混合 Java 和 Groovy:
Mixed Java and Groovy Applications
这个例子着眼于问题 围绕混合的 Java/Groovy 应用。这个问题只会出现 当存在相互依赖时 在您的混合语言源之间 文件。所以,如果你的系统的一部分是 例如纯Java,你不会有 这个问题。你只需编译 首先是系统的那一部分 引用生成的类/jar 来自系统部分的文件 这是用 Groovy 编写的。
【讨论】:
无需特别做任何事情,我只是按照 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,这使得实现这样的东西变得不那么有用了。
【讨论】: