2010-03-30 2 views
3

Можно ли связать замыкание, написанное в java, в groovy-script. Есть ли интерфейс или что-то реализовать, поэтому я могу обеспечить закрытие?Привязать класс java к закрытию в groovy-script

Что-то вроде этого?

public class Example implements Closure { 
    public void closure(Object... args) { 
     System.out.println(args[0]); 
    } 
} 

Привяжите это к groovyscript.

Binding binding = new Binding(); 
binding.put("example", new Example()); 
groovyScriptEngine.run("foo.groovy", binding) 

и использовать его в foo.groovy, как это:

example("Hello World") 

ответ

8

Совершено немного Мессинг вокруг и придумал это:

Example.java

import groovy.lang.Closure ; 

public class Example extends Closure { 
    public Example(Object owner, Object thisObject) { 
    super(owner, thisObject) ; 
    } 

    public Example(Object owner) { 
    super(owner) ; 
    } 

    public Object call(Object params) { 
    System.out.println("EX: " + params) ; 
    return params ; 
    } 
} 

Foo .groovy:

example('Hello World') 

и test.groovy:

import groovy.lang.Binding 
import groovy.util.GroovyScriptEngine 

Binding binding = new Binding() 
binding.example = new Example(this) 
GroovyScriptEngine gse = new GroovyScriptEngine([ '.' ] as String[]) 
gse.run("foo.groovy", binding) 

Затем я скомпилировать код Java:

javac -cp ~/Applications/groovy/lib/groovy-1.7.1.jar Example.java 

Запуск Groovy код:

groovy -cp . test.groovy 

И получить выход:

EX: Hello World 

редактировать

groovy.lang.Closure класс определяет 3 варианта вызова:

Object call() 
Object call(Object arguments) 
Object call(Object[] args) 

Я отменяют второй, но в зависимости от вашего потребительной случае, вам может понадобиться любой или все остальные

+0

Спасибо, что это было очень полезно. Обратите внимание: вы также можете обнулить скрипт владельца в Closure Implementation, поэтому вы можете связать его с Java. – codevour

+0

Можно ли связать внешнее закрытие Groovy в Groovy Script? – codevour

+0

Вы имеете в виду привязать скрипт к скрипту? –

Смежные вопросы