参数化类型的Java Iterator

时间:2016-11-27 10:29:48

标签: java arraylist iterator

我正在尝试为一个ArrayList类型编写一个itertor,其中Number是一个类。

我可以差不多这样做,但我收到了错误:

这是类定义

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;
    }

我在标有** ERROR **

的行上收到错误

我得到的错误是:

此行有多个标记 - 表达式的类型必须是数组类型,但它已解析为ArrayLisy - 类型不匹配:无法从Number转换为ArrayList

我不太清楚该返回什么地方。

有人可以帮忙吗?

THX

2 个答案:

答案 0 :(得分:1)

为了让spins.get(currentIndex++)返回ArrayList<Number>spins的类型必须是List<ArrayList<Number>>,而不是ArrayList<Number>

如果spins的类型正确,您可能需要的是实施Iterator<Number>,而不是Iterator<ArrayList<Number>>(而History应该实施Iterable<Number> )。

答案 1 :(得分: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对象。