可以说我有以下(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
' 的合同。
我有没有办法解决这种行为,这样的修复会破坏其他任何东西吗?