繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM