对于您上面给出的示例,您需要在每次检索元素时保存一些状态,以便知道下一个元素应该具有哪种状态。
这是一个正是这样做的例子。我没有对此进行测试,但它应该清楚地表明我的建议。
public class ComplexObjectIterator implements Iterator<ComplexObject>{
//track start, so you can tell how many elements were retrieved if you want.
private final int start;
private final int end;
private int position;
public ComplexObjectIterator(int start, int end){
if(start>end) throw new Exception("Start must be less "+
"than or equal to end.");
this.start = start;
this.end = end;
this.position = start;
}
public boolean hasNext(){
return position < end;
}
public ComplexObject next(){
if(position >= end)
throw new Exception("No more elements");
ComplexObject obj = new Complexobject(this.position);
position+=1;
return obj;
}
public void remove(){
if(position >= end)
throw new Exception("No more elements");
position+=1;
}
}
如果您真的想要一个无限迭代器,可以轻松更改此代码以提供这种行为。
请注意,迭代器通常用于从底层数据结构返回元素。因为在这里您没有底层结构,所以我会创建一个新接口来调用Generator
您的目的,以防止任何人在查看您的代码时感到困惑。
就问题的限制而言,它可能是为了防止恶意用户用过多的问题攻击网站。不是你这样做,只是提供一个可能的解释。