我正在尝试为一个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
答案 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对象。