我对找到一个可变的hasNext()
的直接反应是,这可能不正确,并且依赖于依赖于我想象的是java迭代的合同的外部使用(我的有限搜索没有产生结果,所以也许没有一个。)
然而,在这种情况下,内部是基于分页。所以下面的伪代码解释了功能:
@Override
public boolean hasNext() {
if (collection == null || index >= collection.size()) {
collection = getCollectionContent(page++);
index = 0;
return collection.size() > 0;
}
return true;
}
现在,除了要求hasNext()
之外,您还需要next()
收到NPE。它在典型循环中使用时起作用:
while(foo.hasNext()) {
useFooItem(foo.next());
}
在遍历分页集合中的所有元素方面表现正常。
现在,我认为这本质上是有缺陷的。 hasNext()
永远不应该是可变的。然而,它似乎很好地解决了分页迭代,而且我无法做出非常有说服力的论证。
你能想到上面会有缺陷的正常用例吗?