我想知道是否有一种方法可以让 Binding 对象存储对对象的引用,而不是复制一个?
Binding b = new Binding()
String test = "test"
b.setVariable("sth", test)
test = "blah"
GroovyShell gs = new GroovyShell(b)
gs.evaluate("print(sth)")
不幸的是它打印“测试”。
有没有办法在 groovy 中做到这一点?
编辑:
我给出的例子是错误的,而且太简单了。
我认为我的问题发生是因为我在一个线程中实例化对象并在另一个线程中运行脚本。
class Test {
[...] // field declarations
public Test(String name, String url, def params, String validateScript, String afterTestScript, GroovyShell shell) {
[...] //just assigning params to fields
shell.setVariable("current", this)
}
void action() {
response = "something"
}
void validate() {
//shell.setVariable("current", this)
}
void afterTest() {
if (afterTestScript) shell.evaluate(afterTestScript)
}
}
所以 Test 对象是在一个线程中创建的,然后我将它作为对 Runnable 对象的引用传递,然后调用action
,validate
和afterTest
方法。如果我注释掉对setVariable
构造函数的调用并取消注释它的调用validate
将正常工作。
是否有可能是并发“问题”?在 afterTestScript 我只想打印响应字符串。