使用带有可变hasNext()的迭代器进行的可执行实现是否具有本质上的缺陷?

时间:2016-07-26 11:34:36

标签: java pagination iterator

我对找到一个可变的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()永远不应该是可变的。然而,它似乎很好地解决了分页迭代,而且我无法做出非常有说服力的论证。

你能想到上面会有缺陷的正常用例吗?

0 个答案:

没有答案