[英]Call Groovy Closure from Java Class - Will it Compile?
我有一些遗留的Java代码,我想称之为groovy Closure。
这是Java / Groovy交叉编译器能够处理的东西吗? 我怀疑它首先编译Java,但它是否通过Groovy字节码再次传递以解析所有java引用。
或者我是否需要首先将带有闭包的类编译到jar中,以便我可以从Java访问它?
我看到这个混合Java和Groovy:
混合Java和Groovy应用程序
此示例查看有关混合Java / Groovy应用程序的问题。 仅当混合语言源文件之间存在相互依赖关系时,才会出现此问题。 因此,如果您的系统的一部分是纯Java,那么您将不会遇到此问题。 您只需先编译系统的那一部分,然后从系统中用Groovy编写的部分引用生成的类/ jar文件。
我不需要特别做任何事情,只需按照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,这使得实现这样的东西变得不那么有用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.