【问题标题】:Integer.valueOf() cannot find symbol in IteratorInteger.valueOf() 在迭代器中找不到符号
【发布时间】:2016-09-10 11:52:28
【问题描述】:

您好,我想在一个链接列表(返回列表中的值)上写我自己的Iterator。出于某种原因,我在调用Integer.valueOf()时出现“找不到符号”错误

import java.util.*;
class List {
    private Node head;
    private class IntIterator<Integer> implements Iterator<Integer>{
        private Node currentNode;

    private IntIterator(){
        currentNode = head;
    }

    @Override
    public boolean hasNext(){
        return currentNode != null;
    }

    @Override
    public Integer next(){
        if (!hasNext()) {
            return Integer.valueOf(-1); //the compiler doesnt like this..
        }
        int val = currentNode.val;
        currentNode = currentNode.next;
        return Integer.valueOf(val); //and that!
    }

    public IntIterator<Integer> iterator(){
        return new IntIterator<Integer>();
    }
}

我不知道这个问题是怎么发生的,因为编译器在程序的其他部分没有抱怨Integer

无论如何,我希望你能帮助我解决这个问题!

【问题讨论】:

  • @Lee 编译错误没有堆栈跟踪。请调整您的期望。

标签: java generics iterator integer


【解决方案1】:

这里的问题是类型参数Integer隐藏了可见类型java.lang.Integer。你应该这样写

private class IntIterator implements Iterator<Integer>

而不是

private class IntIterator<Integer> implements Iterator<Integer>
                         ^^^^^^^^^

看来您并不完全了解泛型。我建议你阅读them

【讨论】:

  • 好的,我现在明白了。在我的情况下使用迭代器是否会增加不必要的性能开销?
  • @user3025417,在我看来,你不需要在next中检查hasNext(你的API用户必须这样做)
  • @user3025417,你可以考虑private class Itr in ArrayList,它提供了很好的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2019-11-02
相关资源
最近更新 更多