我遇到了这个问题:
给定可迭代
class Foo
,它始终只保留一个int
在其构造函数上设置的值,使迭代器成为它 尊重所有限制:您无法更改int
初始化后的值。您应该只包括所需的 抛出异常。
好的,到目前为止,如果我以正确的方式理解这个问题,我应该为Foo
类创建一个迭代器,但是我以前从未这样做过,似乎是问题本身有点误导。这是一个清单吗?或者不应该?无论如何,尽管如此,我想知道的是如何创造它。
所以现在我就是这样:
public class Foo implements Iterable<Foo> {
@Override
public Iterator<Foo> iterator() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
但我甚至不知道这是否是正确的方法。 如果有人可以帮我解决这个问题,我将非常感激。
提前谢谢。
答案 0 :(得分:1)
最小的例子是返回一个空的迭代器,hasNext()
总是返回false
而next()
会抛出NoSuchElementException
。
public Iterator<Foo> iterator() {
return new Iterator<Foo>() {
public boolean hasNext() {
return false;
}
public Foo next() {
throw new NoSuchElementException();
}
};
}
当然,大多数迭代器都有状态。例如,您可以从0
迭代到Foo
实例所持有的整数值。
import java.util.Iterator;
import java.util.NoSuchElementException;
public class Foo implements Iterable<Foo> {
private final int value;
public Foo(final int value) {
this.value = value;
}
@Override
public Iterator<Foo> iterator() {
return new Iterator<Foo>() {
private Foo foo = new Foo(0);
@Override
public boolean hasNext() {
return foo.value < Foo.this.value;
}
@Override
public Foo next() {
if (!hasNext()) throw new NoSuchElementException();
Foo cur = foo;
foo = new Foo(cur.value+1);
return cur;
}
};
}
public static void main(String[] args) {
Foo foo = new Foo(10);
for (Foo f: foo) {
System.out.println(f.value);
}
}
}