2014-07-24 41 views
0

我想創建自己的迭代器,並在foreach循環中使用它。但得到一個錯誤,該對象無法從對象轉換爲整數。 這段代碼的目的是理解迭代器接口。爲什麼這個迭代器不能在foreach循環中工作?

package com.java.collections; 

import java.util.Iterator; 

public class Counter implements Iterable { 

    int count; 

    Counter(int count){ 
     this.count = count; 
    } 

    @Override 
    public Iterator iterator() { 
     // TODO Auto-generated method stub 
     return new Iterator<Integer>() { 
     private int i = 0; 
     @Override 
     public boolean hasNext() { 
      // TODO Auto-generated method stub 

      return i < count; 
     } 

     @Override 
     public Integer next() { 
      // TODO Auto-generated method stub 
      i++; 
      return i; 
     } 

     @Override 
     public void remove() { 
      // TODO Auto-generated method stub 

     } 
    }; 

    } 
} 

package com.java.collections; 

public class TestCounter { 

    public static void main(String[] args) { 
     new TestCounter().test(); 
    } 

    void test() { 
     for(Integer i : new Counter(5)) 
     { 

     } 
    } 
} 

回答

2

你(你的情況Integer)使用泛型類型迭代

public class Counter implements Iterable<Integer> { 
... 
} 
+0

做到了這一點,出現錯誤爲「類型不匹配:無法從元素類型Iterable轉換爲Integer」 – anirban

+1

您很可能試圖在next()方法中返回Iterator而不是Integer。 –

+0

是的傑夫,對不起,我輸入公共類計數器匆忙地實現了Iterable 。把它改回Integer。它的工作。謝謝 – anirban

2

Iterable接口可以用戶泛型,因爲你的計數器是一個整數,你應該指定這個:

public class Counter implements Iterable<Integer> { 
    //other methods and code omitted 

    public Iterator<Integer> iterator() { 
     //same code as in posted question 
    } 
} 
相關問題