Почему Groovy-оценщик возвращает NULL?
У меня есть следующий код:
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
НОЛЬ? Это не может быть проблемой с story
экземпляр, как я убедился в другом коде, getDescriptions()
а также getDescriptions().get(0)
оба возвращают ненулевые значения. Также, getDescriptions().get(0)
возвращает непустое, непустое строковое значение. Заранее спасибо!
1 ответ
Решение
Возвращает значение:
story.getDescriptions().get(0).setText
Я предполагаю setText
имеет void
тип возврата
Поэтому вы получаете null
Попробуйте изменить свое выражение на:
story.descriptions.get( 0 ).with { d ->
d.text = d.text.replace("@", "at")
.replace( '"', "'")
.replace( "%", "percent" )
d
}
(или все в одной строке, как):
story.descriptions.get( 0 ).with { d -> d.text = d.text.replace("@", "at").replace( '"', "'").replace( "%", "percent" ) ; d }