私が次のものを持っているとしましょう(ideone):
x = [1,2,3]
y = x.iterator();
println y.next();
println y.next();
println y.next();
println y.next();
これは以下を出力します:
1
2
3
Caught: java.util.NoSuchElementException
java.util.NoSuchElementException
at java_util_Iterator$next.call(Unknown Source)
at prog.run(prog.groovy:7)
予想通り。
しかし、 に変更x = [1,2,3]
してみましょうx = 1..3
。コードは次のようになります ( ideone ):
x = 1..3
y = x.iterator();
println y.next();
println y.next();
println y.next();
println y.next();
出力が得られます。
1
2
3
null
また、例外はスローされません。これはなぜですか?[1,2,3] と 1..3 を反復処理するときに異なる動作をするのは本当に予想外です。そのような行為はiterator
さんの契約に違反しているようです。
この動作を修正する方法はありますか?また、そのような修正によって他の問題が発生することはありますか?