单个对象的自定义迭代器



我正在尝试为单个对象(例如文件(创建一个迭代器。它必须返回单个文件。但是当我测试这段代码时,它返回的不是单个路径,而是无限的路径循环!

public class File {
public String path;
public File(String str){
path = str;
}
@Override
public Iterator<File> iterator() {
// TODO
RegularFile r = this;
return new Iterator<File>() {
private boolean i;
@Override
public boolean hasNext(){
return !i;
}
@Override
public File next() {
if (!hasNext()) throw new NoSuchElementException();
i = true;
return r;
}
};
}
public static void main(String[] args){
File f = new File("C:temp");
while (f.iterator().hasNext()) {
System.out.println(f.iterator().next().path);
}
}

怎么了?!

此方法每次调用时都会创建一个Iterator

public Iterator<File> iterator() {
// TODO
RegularFile r = this;
return new Iterator<File>() {

每次循环时都调用该方法,每次创建一个新的Iterator

while (f.iterator().hasNext()) {

(我不得不说,变量名i和逻辑否定无助于阅读此代码。next()中的这种缩进无处不在 -if后行上的语句看起来好像是"then"块的一部分,但事实并非如此。Collections.singleton​(path).iterator()会起作用。

最新更新