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
的每个实例都是相同的
这是我第一次与 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