【问题标题】:Call Groovy Closure from Java Class - Will it Compile?从 Java 类调用 Groovy 闭包——它会编译吗?
【发布时间】:2009-12-03 07:52:01
【问题描述】:

我有一些遗留的 Java 代码,我想在其中调用一个 groovy Closure。

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

或者我需要先将带有闭包的类编译成一个jar,以便我可以从Java访问它?

【问题讨论】:

    标签: java groovy compilation


    【解决方案1】:

    我看到这个是为了混合 Java 和 Groovy:
    Mixed Java and Groovy Applications

    这个例子着眼于问题 围绕混合的 Java/Groovy 应用。这个问题只会出现 当存在相互依赖时 在您的混合语言源之间 文件。所以,如果你的系统的一部分是 例如纯Java,你不会有 这个问题。你只需编译 首先是系统的那一部分 引用生成的类/jar 来自系统部分的文件 这是用 Groovy 编写的。

    【讨论】:

      【解决方案2】:

      无需特别做任何事情,我只是按照 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,这使得实现这样的东西变得不那么有用了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 2011-01-02
        • 2014-04-05
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多