0

次のコードがあります。

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

なぜresultNULLなのですか?story他のコードで確認したようにgetDescriptions()getDescriptions().get(0)両方とも非 null 値を返すため、インスタンスに問題はありません。また、getDescriptions().get(0)null 以外の空でない文字列値を返します。前もって感謝します!

4

1 に答える 1

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
}

(またはすべて1行で):

story.descriptions.get( 0 ).with { d -> d.text = d.text.replace("@", "at").replace( '"', "'").replace( "%", "percent" ) ; d }
于 2013-10-01T13:33:36.660 に答える