从Java类调用Groovy Closure - 它会编译吗?

时间:2009-12-03 07:52:02

标签: java groovy compilation

我有一些遗留的Java代码,我想称之为groovy Closure。

这是Java / Groovy交叉编译器能够处理的东西吗?我怀疑它首先编译Java,但它是否通过Groovy字节码再次传递以解析所有java引用。

或者我是否需要首先将带有闭包的类编译到jar中,以便我可以从Java访问它?

2 个答案:

答案 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,这使得实现这样的东西的效果更差。