簡體   English   中英

將java類作為閉包綁定到groovy腳本中

[英]Bind a java class as a closure into a groovy-script

是否可以將用java編寫的閉包綁定到groovy腳本中。 是否有接口或要實現的東西,所以我可以提供一個閉包?

像這樣的東西?

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

做了一點搞亂,想出了這個:

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) 

我覆蓋了第二個,但根據您的用例,您可能需要其他任何一個或全部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM