2016-01-06 147 views
2

這是我第一次與Java Iterable一起工作,我遇到了一個問題,(i)使我發瘋,(ii)顯示我理解得很差!Java可迭代:爲什麼一個對象的迭代器迭代另一個對象的數據?

我有下面的類:

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是另一個類。然後,我有以下幾點:

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元素的內容!這裏發生了什麼?

THX

+2

什麼是'in1'和'in2'?請發佈[MCVE]。 –

+2

爲什麼'docs'' static''? –

回答

4

在你的docs聲明取下static(即限制類一個,只有一個,ListDocumentList所有實例)。

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

您聲明的文檔ArrayList是靜態的。 private static ArrayList<Document> docs = null;因此,這個ArrayList對於每個實例DocumentList