为什么这个迭代器不能在foreach循环中工作?

时间:2014-07-24 03:34:32

标签: java collections

我正在尝试创建自己的迭代器并在foreach循环中使用它。但是得到一个错误,即Object无法从Object转换为Integer。 这段代码的目的是理解迭代器接口。

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))
        {

        }
    }
}

3 个答案:

答案 0 :(得分:2)

您必须使用具有可迭代的通用类型(在您的情况下为Integer

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

答案 1 :(得分:2)

Iterable接口可以是用户泛型,因为你的计数器是一个整数,你应该指定:

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

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

答案 2 :(得分:0)

每个

仅需要array or Iterable

看看The enhanced for statement