Вызов Groovy Closure из класса Java - будет ли он компилироваться? - PullRequest
3 голосов
/ 03 декабря 2009

У меня есть какой-то унаследованный Java-код, внутри которого я бы хотел назвать отличное закрытие.

Может ли кросс-компилятор Java / Groovy справиться с этим? Я подозреваю, что он сначала компилирует Java, но делает ли он еще один проход через байт-код Groovy, чтобы разрешить все ссылки Java.

Или мне нужно сначала скомпилировать класс с замыканием в jar, чтобы я мог получить к нему доступ из Java?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2009

Я вижу это для смешивания Java и Groovy:
Смешанные Java и Groovy приложения

В этом примере рассматриваются проблемы окружение смешанной Java / Groovy приложение. Эта проблема возникает только когда есть взаимозависимости между вашим смешанным языковым источником файлы. Итак, если часть вашей системы например, чистая Java, у вас не будет Эта проблема. Вы бы просто скомпилировали эта часть вашей системы в первую очередь и ссылка на полученный класс / банку файл (ы) из части вашей системы это было написано в Groovy.

0 голосов
/ 13 января 2012

Не делая ничего конкретного, я просто получил простую версию этого, следуя совету из статьи 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 не работает. Если я изменил GroovyDecorator, мне пришлось бы перезапустить Grails, что делает реализацию таких вещей гораздо менее полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...