2009-12-03 40 views
3

我有一些遺留的Java代碼,我想調用Groovy Closure。從Java類調用Groovy閉包 - 它會編譯嗎?

這是Java/Groovy交叉編譯器能夠處理的東西嗎?我懷疑它先編譯Java,但它是否會通過Groovy字節碼進行另一次傳遞來解析所有的java引用。

或者我需要先將閉包編譯成一個jar文件,以便我可以從Java訪問它?

回答

2

我看到這個混合Java和Groovy:
Mixed Java and Groovy Applications

這個例子看問題 周圍混合的Java/Groovy的 應用。當您的混合語言源文件 之間存在相互依賴關係 時,此問題僅出現在 。所以,如果你的系統的一部分是 純Java,你將不會有 這個問題。您只需編譯 首先部分的系統,然後 參考Groovy中編寫的部分系統 生成的類/ jar 文件。

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"); 
} 

而且從常規調用:

GroovyDecorator gd = new GroovyDecorator() ; 
javaFunc(someStuff, gd) ; 

這工作得很好,不需要做任何特殊的編譯,雖然我正在建立一個groovy環境,可能有一些我不知道的特殊配置。

請注意,.groovy文件的自動重新編譯不起作用。如果我更改了GroovyDecorator,我必須重新啓動grails,這使得實現類似這樣的東西更加有用。