【问题标题】:Java Iterator for a parameterised type用于参数化类型的 Java 迭代器
【发布时间】:2017-04-11 04:59:04
【问题描述】:

我正在尝试为 ArrayList 类型编写一个迭代器,其中 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

我不太确定在这里返回什么。

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 这一行有多个标记 - 表达式的类型必须是数组类型,但它解析为 ArrayLisy 类型不匹配:无法从 Number 转换为 ArrayList
  • 您能否添加错误消息,以便有相同问题的人能够找到您的问题和可能的答案?
  • 已完成,抱歉 - 而且,请注意,这不是运行时错误,而是“屏幕错误”,因此无法执行

标签: java arraylist iterator


【解决方案1】:

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

如果spins 的类型正确,也许您需要实现Iterator&lt;Number&gt;,而不是Iterator&lt;ArrayList&lt;Number&gt;&gt;(并且History 应该实现Iterable&lt;Number&gt;)。

【讨论】:

  • 谢谢你 - 我会尝试这些建议
【解决方案2】:

改变

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

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

返回类型错误因此编译错误。 当您调用next() 方法时,您希望迭代An ArrayList&lt;Number&gt; 中的每个Number 对象。

【讨论】:

  • 谢谢 - 仅供参考 - 删除原始错误,但在更改的行上给出(类似)错误
  • @Graham link 试试这个例子
  • 非常感谢 - 将类型更改为 解决了这个问题。
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2011-02-28
相关资源
最近更新 更多