为什么Groovy evaluator返回NULL?

为什么Groovy evaluator返回NULL?,groovy,nullpointerexception,evaluate,Groovy,Nullpointerexception,Evaluate,我有以下代码: Binding binding = new Binding(); binding.setVariable("story", storyFactory.newStory()); GroovyShell shell = new GroovyShell(binding); exp = getExpression(); System.out.println("Expression: " + exp); Object result = (Object)shell.evaluate(exp)

我有以下代码:

Binding binding = new Binding();
binding.setVariable("story", storyFactory.newStory());
GroovyShell shell = new GroovyShell(binding);
exp = getExpression();
System.out.println("Expression: " + exp);
Object result = (Object)shell.evaluate(exp);    
生成以下NullPointerException和控制台输出:

Expression: story.getDescriptions().get(0).setText(story.getDescriptions().get(0).getText().replace("@", "at").replace("\"", "'").replace("%", "percent"));
java.lang.NullPointerException
    at com.me.myapp.GroovyEvaluator._evaluate(GroovyEvaluator.java:56)
    at com.me.myapp.testing.expressions.Driver.runEvaluator(Driver.java:131)
    at com.me.myapp.testing.expressions.Driver.run(Driver.java:65)
    at com.me.myapp.testing.expressions.Driver.main(Driver.java:31)

null

为什么
result
NULL?
story
实例不会有问题,因为我在其他代码中验证了
getDescriptions()
getDescriptions().get(0)
都返回非空值。另外,
getDescriptions().get(0)
确实返回非空字符串值。提前谢谢

它返回以下值:

story.getDescriptions().get(0).setText
我假设
setText
有一个
void
返回类型

因此您会得到
null

尝试将表达式更改为:

story.descriptions.get( 0 ).with { d ->
    d.text = d.text.replace("@", "at")
                   .replace( '"', "'")
                   .replace( "%", "percent" )
    d
}
(或全部在同一行上,如):


谢谢@tim_yates(+1)-但是现在我得到了一个不同的错误:
启动失败,Script1.groovy:1:意外标记:d@line 1,第119列。1错误
。你知道为什么它不能识别
d
?是否需要在
绑定中添加
d
作为绑定变量?再次感谢@TicketMonster在最后的
d
之前的一行添加了一个带有分号的版本。。。这样行吗?
story.descriptions.get( 0 ).with { d -> d.text = d.text.replace("@", "at").replace( '"', "'").replace( "%", "percent" ) ; d }