2016-11-27 78 views
1

我正在嘗試爲ArrayList類型編寫一個itertor,其中Number是一個類。參數化類型的Java迭代器

我可以幾乎做到這一點,但我得到的錯誤:

這是類定義

public class History implements Iterable<ArrayList<Number>> { 

這是我要遍歷類型的定義:

private ArrayList<Number> spins = new ArrayList<Number>(); 

...這裏是迭代函數:

@Override 
    public Iterator<ArrayList<Number>> iterator() { 
     Iterator<ArrayList<Number>> it = new Iterator<ArrayList<Number>>() { 

      private int currentIndex = 0; 

      @Override 
      public boolean hasNext() { 
       return currentIndex < gethistorySize() && spins.get(currentIndex) != null; 
      } 

      @Override 
      public ArrayList<Number> next() { 
       return spins.get(currentIndex++); // ** ERROR ** 
      } 

      @Override 
      public void remove() { 
       throw new UnsupportedOperationException(); 
      } 
     }; 
     return it; 
    } 

我得到了線的錯誤標記**錯誤**

我得到的錯誤是:

在該行 多個標記 - 該類型的表達式必須是一個數組類型,但它解決了到ArrayLisy - 類型不匹配:無法從Number轉換爲ArrayList

我不太確定此處返回的內容。

任何人都可以幫忙嗎?

THX

+0

這行 多個標記 - 該類型的表達式必須是一個數組類型,但它決心ArrayLisy 類型不匹配:不能從數CONVER到ArrayList的 Graham

+0

您可以加入錯誤信息使人們有同樣的問題,就能夠找到你的問題和可能的答案? – Pshemo

+0

完成上面,對不起 - 只是要注意,這不是一個運行時錯誤,而是一個「屏幕錯誤」,所以不能complie – Graham

回答

1

爲了spins.get(currentIndex++)返回一個ArrayList<Number>spins類型必須是List<ArrayList<Number>>,不ArrayList<Number>

如果spins類型是正確的,也許你需要的是實現一個Iterator<Number>,不是Iterator<ArrayList<Number>>(和History應該實現Iterable<Number>)。

+0

Thnak你 - 我會嘗試這些建議 – Graham

0

變化

 @Override 
     public ArrayList<Number> next() { 
      return spins.get(currentIndex++); // ** ERROR ** 
     } 

 @Override 
     public Number next() { 
      return spins.get(currentIndex++); // ** ERROR ** 
     } 

返回類型是錯誤的,因此編譯錯誤。 當您調用next()方法時,您想迭代An ArrayList<Number>中的每個Number對象。

+0

Thansk - 只是爲了信息 - - 刪除原來的錯誤,但在改變的行上給出(類似的)錯誤 – Graham

+0

@Graham [link](http://codereview.stackexchange.com/questions/48109/simple-example-of-an-iterable-and-an-iterator-in -java)嘗試一些這個例子 –

+0

非常感謝所有 - 改變類型爲 respolved this。 – Graham