gpt4 book ai didi

java - 为什么迭代器不强制 hasext 调用?

转载 作者:行者123 更新时间:2023-12-01 06:32:39 25 4
gpt4 key购买 nike

如果 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/

25 4 0
文章推荐: jquery - Bootstrap 多重选择下拉列表在附加时不起作用
文章推荐: php - 如何在 AJAX 调用中获取 JavaScript 变量作为 Laravel 路由名称
文章推荐: python - 如何在 Pandas 数据框中按值获取准确的行号和列号(即单元格地址)
文章推荐: java - List list = Database.getAllData(); 是什么类型的列表?