【问题标题】:Embedding Groovy in Java (Binding)在 Java 中嵌入 Groovy(绑定)
【发布时间】:2013-02-26 12:51:15
【问题描述】:

我尝试将变量绑定到 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);

Groovy 代码:

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

输出:

From Java: foo
FROM GROOVY: foo

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

谁能帮帮我?

【问题讨论】:

    标签: java binding groovy embedding


    【解决方案1】:

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

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

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

    def SRESULT = 'bar'
    

    不会工作。这是因为声明(使用def 或使用显式类型)在脚本中创建局部变量,它们不会分配给绑定。

    【讨论】:

    • @user1734715 如果答案对您有用,您应该考虑通过单击左侧的勾号来接受它。建立接受良好答案的记录是鼓励人们帮助您解决未来问题的最佳方式。
    【解决方案2】:

    鉴于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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      相关资源
      最近更新 更多