在Java中嵌入Groovy(绑定)
我尝试将变量绑定到Groovy并从Groovy绑定到Java 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中的Value。
有谁能够帮我?
绑定仅适用于脚本 ,而不适用于类 。 如果你的Groovy代码是一个脚本,即只是没有周围类体的main
方法的内容
println 'From Java: '+SRESULT SRESULT = 'bar'
然后它会产生你期望的结果。 特别是你不能在脚本中声明 SRESULT
变量,即
def SRESULT = 'bar'
不行 。 这是因为声明(使用def
或带有显式类型)在脚本中创建局部变量,它们不会分配给绑定。
给定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
- Spring集成 – 外部化JDBC查询
- Gradle – Groovy和Java类依赖 – 编译
- 即使我在正确的域上,Selenium addCookie也会获得无效的Cookie域exception
- 从外部jar或外部类路径动态加载的Map实体
- 解决错误java.lang.NoSuchMethodError:org.codehaus.groovy.ast.ModuleNode.getStarImports()Ljava / util / List;
- 将Groovy Grails-service注入Java类
- 在java 8中的groovy和闭包中的闭包(lambda表达式)?
- Groovy脚本获取请求xml
- 有效的Java代码是无效的Groovy代码?