如果您创建自己的Iterable
容器类并在其元素上检索java.util.Iterator
,是否有任何编码模式,根据该编码模式,容器中任何进一步添加的元素应该不可以从Iterator
访问?我在思考"没办法,绝对没有,事实上Iterator
应该能够循环遍历所有元素而不管添加内容。"
或者,如果在新添加后调用Iterator
,则失败的next()
应该抛出异常?
自从我用Java编写代码之后已经有一段时间了,但这里有些东西很糟糕。
答案 0 :(得分:2)
可能是故障快速迭代器应该抛出的情况 如果在新添加后调用
next()
,则会出现异常吗?
正确。我相信如果您尝试使用Java内置Iterable
中的任何一个,那么您将获得ConcurrentModificationException
整个Javadoc for that exception值得一读。它非常简洁。而不是引用整个事情,重点是迭代器在未来的未确定时间内不会快速失败" [风险]任意,非确定性行为。"
答案 1 :(得分:0)
用户Michael在上面的评论中回答了我的问题。快速失败的迭代器应该完全遵循后者。现在,当我们更喜欢快速失败而不是故障安全时,我不确定,但鉴于容器根据定义是可变的,我相信Fail-Fast可能是唯一的出路。