2

我尝试将变量绑定到 Groovy 并从 Groovy 返回 zu Java:

Java代码:

Binding binding = new Binding();
binding.setVariable("SRESULT", "foo");
GroovyShell gs = new GroovyShell(binding);
gs.evaluate(script);
String sResult = (String) gs.getContext().getVariable("SRESULT");
System.out.println("FROM GROOVY: " + sResult);

常规代码:

class Est {  
  static SRESULT
  public static void main(String[] args) {
    println 'From Java: '+SRESULT
    SRESULT = 'bar'
  }
}

输出:

From Java: foo
FROM GROOVY: foo

我的问题:我想SRESULT在 Groovy 中进行更改并访问 Java 中的值。

有谁能够帮我?

4

2 回答 2

8

绑定仅适用于脚本,不适用于。如果您的 Groovy 代码是一个脚本,即只是main方法的内容,没有周围的类主体

println 'From Java: '+SRESULT
SRESULT = 'bar'

那么它会产生你期望的结果。特别是你不能在脚本中声明SRESULT变量,即

def SRESULT = 'bar'

行不通。_ 这是因为声明(带有def或带有显式类型)在脚本中创建局部变量,它们不会分配给绑定。

于 2013-02-26T14:42:56.330 回答
3

鉴于Test.java包含:

import groovy.lang.Binding ;
import groovy.lang.GroovyShell ;
import java.io.File ;

public class Test {
    public static void main( String[] args ) throws Exception {
        Binding binding = new Binding() ;
        binding.setVariable( "SRESULT", "foo" ) ;

        GroovyShell gs = new GroovyShell( binding ) ;
        gs.evaluate( new File( "script.groovy" ) ) ;

        String sResult = (String)binding.getVariable( "SRESULT" ) ;
        System.out.printf( "FROM GROOVY: %s\n", sResult ) ;
    }
}

script.groovy包含:

println "From Java: $SRESULT"
SRESULT = 'bar'

我们可以这样编译Test.java

javac -cp $GROOVY_HOME/embeddable/groovy-all-2.1.1.jar:. Test.java

然后运行它:

java -cp $GROOVY_HOME/embeddable/groovy-all-2.1.1.jar:. Test

给出输出:

From Java: foo
FROM GROOVY: bar
于 2013-02-26T13:52:33.557 回答