Java 可迭代:为什么一个对象的迭代器迭代另一个对象的数据?

Java iterable: why is iterator for one object iterates over data from another?

这是我第一次与 Java Iterable 一起工作,我 运行 遇到了一个问题,(i) 使我发疯并且 (ii) 展示了如何有点不懂!

我有以下 class:

public class DocumentList implements Iterable<Document> {

private static ArrayList<Document> docs = null;
// other vars...

public DocumentList(InputStream in) {

    // load list from in

}

// other methods...

public Iterator<Document> iterator() {
    return new DocSetIterator();
}

private class DocSetIterator implements Iterator<Document> {
    private int ix = 0;

    public DocSetIterator() {
        ix = 0;
    }

    public boolean hasNext() {
        return ix < nDocs;
    }

    public Document next() {
        if(this.hasNext()) {
            Document current = docs.get(ix++);
            return current;
        }
        throw new NoSuchElementException();
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}

}

其中 Document 是另一个 class。然后我有以下内容:

DocumentList dList1 = new DocumentList(in1);
DocumentList dList2 = new DocumentList(in2);

Iterator<Document> it = dList2.iterator();
while(it.hasNext()) {
    Document d2 = it.next(); 
    // ...          
}

我希望 d2 成为 dList2 的元素之一,但我看到的却是 dList1 的元素的内容!这是怎么回事?

感谢

删除 docs 声明中的 static(这将 class 限制为一个,并且只有一个 List 对于所有 DocumentList).

private ArrayList<Document> docs = null; // <-- not static.

您的文档声明 ArrayList 是静态的。 private static ArrayList<Document> docs = null;因此,这个 ArrayList 对于 DocumentList

的每个实例都是相同的