如果 hasNext 和 Next 像这样工作的话,这似乎是一个很好的方法:
boolean hasNextCalled = false;
boolean hasNext() {
hasNextCalled = true
}
next() {
assert hasNextCalled
}
这样我们就永远不会遇到 NoSuchElementException() 的情况。 不强制执行 hasNext() 调用有什么实际原因吗?
最佳答案
有什么好处?您只需将 NoSuchElementException
替换为 AssertionError
,并引入一点点开销。另外,由于 Iterator
是一个接口(interface),因此您无法实现一次;它必须出现在Iterator
的每个实现中。另外,文档没有强制要求在调用 next
之前调用 hasNext
,因此您的提案将违反当前契约(Contract)。这样的更改会破坏任何依赖 NoSuchElementException
编写的代码。最后,可以在生产代码中关闭断言,因此您仍然需要 NoSuchElementException
机制。
关于java - 为什么迭代器不强制 hasext 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262733/